Commit 7bcf5c0e7fd9ab4ddb9e24d7e91bda2ac23e5678
1 parent
2fd9d74b35
Exists in
master
and in
7 other branches
[PATCH] PCI: move pci core to use add_hotplug_env_var()
This fixes a bug in the environment variables for all PCI device hotplug calls. Thanks to Kay Sievers for pointing out the problem. Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Showing 1 changed file with 21 additions and 32 deletions Side-by-side Diff
drivers/pci/hotplug.c
... | ... | @@ -20,46 +20,35 @@ |
20 | 20 | |
21 | 21 | scratch = buffer; |
22 | 22 | |
23 | - /* stuff we want to pass to /sbin/hotplug */ | |
24 | - envp[i++] = scratch; | |
25 | - length += scnprintf (scratch, buffer_size - length, "PCI_CLASS=%04X", | |
26 | - pdev->class); | |
27 | - if ((buffer_size - length <= 0) || (i >= num_envp)) | |
23 | + | |
24 | + if (add_hotplug_env_var(envp, num_envp, &i, | |
25 | + buffer, buffer_size, &length, | |
26 | + "PCI_CLASS=%04X", pdev->class)) | |
28 | 27 | return -ENOMEM; |
29 | - ++length; | |
30 | - scratch += length; | |
31 | 28 | |
32 | - envp[i++] = scratch; | |
33 | - length += scnprintf (scratch, buffer_size - length, "PCI_ID=%04X:%04X", | |
34 | - pdev->vendor, pdev->device); | |
35 | - if ((buffer_size - length <= 0) || (i >= num_envp)) | |
29 | + if (add_hotplug_env_var(envp, num_envp, &i, | |
30 | + buffer, buffer_size, &length, | |
31 | + "PCI_ID=%04X:%04X", pdev->vendor, pdev->device)) | |
36 | 32 | return -ENOMEM; |
37 | - ++length; | |
38 | - scratch += length; | |
39 | 33 | |
40 | - envp[i++] = scratch; | |
41 | - length += scnprintf (scratch, buffer_size - length, | |
42 | - "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor, | |
43 | - pdev->subsystem_device); | |
44 | - if ((buffer_size - length <= 0) || (i >= num_envp)) | |
34 | + if (add_hotplug_env_var(envp, num_envp, &i, | |
35 | + buffer, buffer_size, &length, | |
36 | + "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor, | |
37 | + pdev->subsystem_device)) | |
45 | 38 | return -ENOMEM; |
46 | - ++length; | |
47 | - scratch += length; | |
48 | 39 | |
49 | - envp[i++] = scratch; | |
50 | - length += scnprintf (scratch, buffer_size - length, "PCI_SLOT_NAME=%s", | |
51 | - pci_name(pdev)); | |
52 | - if ((buffer_size - length <= 0) || (i >= num_envp)) | |
40 | + if (add_hotplug_env_var(envp, num_envp, &i, | |
41 | + buffer, buffer_size, &length, | |
42 | + "PCI_SLOT_NAME=%s", pci_name(pdev))) | |
53 | 43 | return -ENOMEM; |
54 | 44 | |
55 | - envp[i++] = scratch; | |
56 | - length += scnprintf (scratch, buffer_size - length, | |
57 | - "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x", | |
58 | - pdev->vendor, pdev->device, | |
59 | - pdev->subsystem_vendor, pdev->subsystem_device, | |
60 | - (u8)(pdev->class >> 16), (u8)(pdev->class >> 8), | |
61 | - (u8)(pdev->class)); | |
62 | - if ((buffer_size - length <= 0) || (i >= num_envp)) | |
45 | + if (add_hotplug_env_var(envp, num_envp, &i, | |
46 | + buffer, buffer_size, &length, | |
47 | + "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x", | |
48 | + pdev->vendor, pdev->device, | |
49 | + pdev->subsystem_vendor, pdev->subsystem_device, | |
50 | + (u8)(pdev->class >> 16), (u8)(pdev->class >> 8), | |
51 | + (u8)(pdev->class))) | |
63 | 52 | return -ENOMEM; |
64 | 53 | |
65 | 54 | envp[i] = NULL; |