提交 db89b4f0 编写于 作者: P Pavel Machek 提交者: Len Brown

ACPI: catch calls of acpi_driver_data on pointer of wrong type

Catch attempts to use of acpi_driver_data on pointers of wrong type.

akpm: rewritten to use proper C typechecking and remove the
"function"-used-as-lvalue thing.
Signed-off-by: NPavel Machek <pavel@suse.cz>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLen Brown <len.brown@intel.com>
上级 9e113e00
...@@ -269,7 +269,7 @@ static int acpi_ac_add(struct acpi_device *device) ...@@ -269,7 +269,7 @@ static int acpi_ac_add(struct acpi_device *device)
ac->device = device; ac->device = device;
strcpy(acpi_device_name(device), ACPI_AC_DEVICE_NAME); strcpy(acpi_device_name(device), ACPI_AC_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_AC_CLASS); strcpy(acpi_device_class(device), ACPI_AC_CLASS);
acpi_driver_data(device) = ac; device->driver_data = ac;
result = acpi_ac_get_state(ac); result = acpi_ac_get_state(ac);
if (result) if (result)
......
...@@ -403,7 +403,7 @@ static int acpi_memory_device_add(struct acpi_device *device) ...@@ -403,7 +403,7 @@ static int acpi_memory_device_add(struct acpi_device *device)
mem_device->device = device; mem_device->device = device;
sprintf(acpi_device_name(device), "%s", ACPI_MEMORY_DEVICE_NAME); sprintf(acpi_device_name(device), "%s", ACPI_MEMORY_DEVICE_NAME);
sprintf(acpi_device_class(device), "%s", ACPI_MEMORY_DEVICE_CLASS); sprintf(acpi_device_class(device), "%s", ACPI_MEMORY_DEVICE_CLASS);
acpi_driver_data(device) = mem_device; device->driver_data = mem_device;
/* Get the range from the _CRS */ /* Get the range from the _CRS */
result = acpi_memory_get_device_resources(mem_device); result = acpi_memory_get_device_resources(mem_device);
......
...@@ -1321,7 +1321,7 @@ static int asus_hotk_add(struct acpi_device *device) ...@@ -1321,7 +1321,7 @@ static int asus_hotk_add(struct acpi_device *device)
hotk->handle = device->handle; hotk->handle = device->handle;
strcpy(acpi_device_name(device), ACPI_HOTK_DEVICE_NAME); strcpy(acpi_device_name(device), ACPI_HOTK_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_HOTK_CLASS); strcpy(acpi_device_class(device), ACPI_HOTK_CLASS);
acpi_driver_data(device) = hotk; device->driver_data = hotk;
hotk->device = device; hotk->device = device;
result = asus_hotk_check(); result = asus_hotk_check();
......
...@@ -804,7 +804,7 @@ static int acpi_battery_add(struct acpi_device *device) ...@@ -804,7 +804,7 @@ static int acpi_battery_add(struct acpi_device *device)
battery->device = device; battery->device = device;
strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME); strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS); strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
acpi_driver_data(device) = battery; device->driver_data = battery;
mutex_init(&battery->lock); mutex_init(&battery->lock);
acpi_battery_update(battery); acpi_battery_update(battery);
#ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER
......
...@@ -384,7 +384,7 @@ static int acpi_button_add(struct acpi_device *device) ...@@ -384,7 +384,7 @@ static int acpi_button_add(struct acpi_device *device)
return -ENOMEM; return -ENOMEM;
button->device = device; button->device = device;
acpi_driver_data(device) = button; device->driver_data = button;
button->input = input = input_allocate_device(); button->input = input = input_allocate_device();
if (!input) { if (!input) {
......
...@@ -108,7 +108,7 @@ static int acpi_container_add(struct acpi_device *device) ...@@ -108,7 +108,7 @@ static int acpi_container_add(struct acpi_device *device)
container->handle = device->handle; container->handle = device->handle;
strcpy(acpi_device_name(device), ACPI_CONTAINER_DEVICE_NAME); strcpy(acpi_device_name(device), ACPI_CONTAINER_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_CONTAINER_CLASS); strcpy(acpi_device_class(device), ACPI_CONTAINER_CLASS);
acpi_driver_data(device) = container; device->driver_data = container;
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device <%s> bid <%s>\n", ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device <%s> bid <%s>\n",
acpi_device_name(device), acpi_device_bid(device))); acpi_device_name(device), acpi_device_bid(device)));
......
...@@ -788,7 +788,7 @@ static int acpi_ec_add(struct acpi_device *device) ...@@ -788,7 +788,7 @@ static int acpi_ec_add(struct acpi_device *device)
if (!first_ec) if (!first_ec)
first_ec = ec; first_ec = ec;
acpi_driver_data(device) = ec; device->driver_data = ec;
acpi_ec_add_fs(device); acpi_ec_add_fs(device);
pr_info(PREFIX "GPE = 0x%lx, I/O: command/status = 0x%lx, data = 0x%lx\n", pr_info(PREFIX "GPE = 0x%lx, I/O: command/status = 0x%lx, data = 0x%lx\n",
ec->gpe, ec->command_addr, ec->data_addr); ec->gpe, ec->command_addr, ec->data_addr);
...@@ -813,7 +813,7 @@ static int acpi_ec_remove(struct acpi_device *device, int type) ...@@ -813,7 +813,7 @@ static int acpi_ec_remove(struct acpi_device *device, int type)
} }
mutex_unlock(&ec->lock); mutex_unlock(&ec->lock);
acpi_ec_remove_fs(device); acpi_ec_remove_fs(device);
acpi_driver_data(device) = NULL; device->driver_data = NULL;
if (ec == first_ec) if (ec == first_ec)
first_ec = NULL; first_ec = NULL;
kfree(ec); kfree(ec);
......
...@@ -265,7 +265,7 @@ static int acpi_fan_add(struct acpi_device *device) ...@@ -265,7 +265,7 @@ static int acpi_fan_add(struct acpi_device *device)
dev_info(&device->dev, "registered as cooling_device%d\n", cdev->id); dev_info(&device->dev, "registered as cooling_device%d\n", cdev->id);
acpi_driver_data(device) = cdev; device->driver_data = cdev;
result = sysfs_create_link(&device->dev.kobj, result = sysfs_create_link(&device->dev.kobj,
&cdev->device.kobj, &cdev->device.kobj,
"thermal_cooling"); "thermal_cooling");
......
...@@ -737,7 +737,7 @@ static int acpi_pci_link_add(struct acpi_device *device) ...@@ -737,7 +737,7 @@ static int acpi_pci_link_add(struct acpi_device *device)
link->device = device; link->device = device;
strcpy(acpi_device_name(device), ACPI_PCI_LINK_DEVICE_NAME); strcpy(acpi_device_name(device), ACPI_PCI_LINK_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_PCI_LINK_CLASS); strcpy(acpi_device_class(device), ACPI_PCI_LINK_CLASS);
acpi_driver_data(device) = link; device->driver_data = link;
mutex_lock(&acpi_link_lock); mutex_lock(&acpi_link_lock);
result = acpi_pci_link_get_possible(link); result = acpi_pci_link_get_possible(link);
......
...@@ -206,7 +206,7 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device) ...@@ -206,7 +206,7 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
root->device = device; root->device = device;
strcpy(acpi_device_name(device), ACPI_PCI_ROOT_DEVICE_NAME); strcpy(acpi_device_name(device), ACPI_PCI_ROOT_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS); strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS);
acpi_driver_data(device) = root; device->driver_data = root;
device->ops.bind = acpi_pci_bind; device->ops.bind = acpi_pci_bind;
......
...@@ -657,7 +657,7 @@ static int acpi_power_add(struct acpi_device *device) ...@@ -657,7 +657,7 @@ static int acpi_power_add(struct acpi_device *device)
strcpy(resource->name, device->pnp.bus_id); strcpy(resource->name, device->pnp.bus_id);
strcpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME); strcpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_POWER_CLASS); strcpy(acpi_device_class(device), ACPI_POWER_CLASS);
acpi_driver_data(device) = resource; device->driver_data = resource;
/* Evalute the object to get the system level and resource order. */ /* Evalute the object to get the system level and resource order. */
status = acpi_evaluate_object(device->handle, NULL, NULL, &buffer); status = acpi_evaluate_object(device->handle, NULL, NULL, &buffer);
...@@ -733,7 +733,7 @@ static int acpi_power_resume(struct acpi_device *device) ...@@ -733,7 +733,7 @@ static int acpi_power_resume(struct acpi_device *device)
if (!device || !acpi_driver_data(device)) if (!device || !acpi_driver_data(device))
return -EINVAL; return -EINVAL;
resource = (struct acpi_power_resource *)acpi_driver_data(device); resource = acpi_driver_data(device);
result = acpi_power_get_state(resource, &state); result = acpi_power_get_state(resource, &state);
if (result) if (result)
......
...@@ -818,7 +818,7 @@ static int acpi_processor_add(struct acpi_device *device) ...@@ -818,7 +818,7 @@ static int acpi_processor_add(struct acpi_device *device)
pr->handle = device->handle; pr->handle = device->handle;
strcpy(acpi_device_name(device), ACPI_PROCESSOR_DEVICE_NAME); strcpy(acpi_device_name(device), ACPI_PROCESSOR_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_PROCESSOR_CLASS); strcpy(acpi_device_class(device), ACPI_PROCESSOR_CLASS);
acpi_driver_data(device) = pr; device->driver_data = pr;
return 0; return 0;
} }
......
...@@ -931,7 +931,7 @@ static int acpi_sbs_add(struct acpi_device *device) ...@@ -931,7 +931,7 @@ static int acpi_sbs_add(struct acpi_device *device)
sbs->device = device; sbs->device = device;
strcpy(acpi_device_name(device), ACPI_SBS_DEVICE_NAME); strcpy(acpi_device_name(device), ACPI_SBS_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_SBS_CLASS); strcpy(acpi_device_class(device), ACPI_SBS_CLASS);
acpi_driver_data(device) = sbs; device->driver_data = sbs;
result = acpi_charger_add(sbs); result = acpi_charger_add(sbs);
if (result) if (result)
......
...@@ -282,7 +282,7 @@ static int acpi_smbus_hc_add(struct acpi_device *device) ...@@ -282,7 +282,7 @@ static int acpi_smbus_hc_add(struct acpi_device *device)
hc->ec = acpi_driver_data(device->parent); hc->ec = acpi_driver_data(device->parent);
hc->offset = (val >> 8) & 0xff; hc->offset = (val >> 8) & 0xff;
hc->query_bit = val & 0xff; hc->query_bit = val & 0xff;
acpi_driver_data(device) = hc; device->driver_data = hc;
acpi_ec_add_query_handler(hc->ec, hc->query_bit, NULL, smbus_alarm, hc); acpi_ec_add_query_handler(hc->ec, hc->query_bit, NULL, smbus_alarm, hc);
printk(KERN_INFO PREFIX "SBS HC: EC = 0x%p, offset = 0x%0x, query_bit = 0x%0x\n", printk(KERN_INFO PREFIX "SBS HC: EC = 0x%p, offset = 0x%0x, query_bit = 0x%0x\n",
...@@ -303,7 +303,7 @@ static int acpi_smbus_hc_remove(struct acpi_device *device, int type) ...@@ -303,7 +303,7 @@ static int acpi_smbus_hc_remove(struct acpi_device *device, int type)
hc = acpi_driver_data(device); hc = acpi_driver_data(device);
acpi_ec_remove_query_handler(hc->ec, hc->query_bit); acpi_ec_remove_query_handler(hc->ec, hc->query_bit);
kfree(hc); kfree(hc);
acpi_driver_data(device) = NULL; device->driver_data = NULL;
return 0; return 0;
} }
......
...@@ -384,7 +384,7 @@ static int acpi_device_remove(struct device * dev) ...@@ -384,7 +384,7 @@ static int acpi_device_remove(struct device * dev)
acpi_drv->ops.remove(acpi_dev, acpi_dev->removal_type); acpi_drv->ops.remove(acpi_dev, acpi_dev->removal_type);
} }
acpi_dev->driver = NULL; acpi_dev->driver = NULL;
acpi_driver_data(acpi_dev) = NULL; acpi_dev->driver_data = NULL;
put_device(dev); put_device(dev);
return 0; return 0;
...@@ -537,7 +537,7 @@ acpi_bus_driver_init(struct acpi_device *device, struct acpi_driver *driver) ...@@ -537,7 +537,7 @@ acpi_bus_driver_init(struct acpi_device *device, struct acpi_driver *driver)
result = driver->ops.add(device); result = driver->ops.add(device);
if (result) { if (result) {
device->driver = NULL; device->driver = NULL;
acpi_driver_data(device) = NULL; device->driver_data = NULL;
return result; return result;
} }
......
...@@ -1647,7 +1647,7 @@ static int acpi_thermal_add(struct acpi_device *device) ...@@ -1647,7 +1647,7 @@ static int acpi_thermal_add(struct acpi_device *device)
strcpy(tz->name, device->pnp.bus_id); strcpy(tz->name, device->pnp.bus_id);
strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME); strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS); strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS);
acpi_driver_data(device) = tz; device->driver_data = tz;
mutex_init(&tz->lock); mutex_init(&tz->lock);
......
...@@ -1491,7 +1491,7 @@ acpi_video_bus_get_one_device(struct acpi_device *device, ...@@ -1491,7 +1491,7 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
strcpy(acpi_device_name(device), ACPI_VIDEO_DEVICE_NAME); strcpy(acpi_device_name(device), ACPI_VIDEO_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_VIDEO_CLASS); strcpy(acpi_device_class(device), ACPI_VIDEO_CLASS);
acpi_driver_data(device) = data; device->driver_data = data;
data->device_id = device_id; data->device_id = device_id;
data->video = video; data->video = video;
...@@ -1982,7 +1982,7 @@ static int acpi_video_bus_add(struct acpi_device *device) ...@@ -1982,7 +1982,7 @@ static int acpi_video_bus_add(struct acpi_device *device)
video->device = device; video->device = device;
strcpy(acpi_device_name(device), ACPI_VIDEO_BUS_NAME); strcpy(acpi_device_name(device), ACPI_VIDEO_BUS_NAME);
strcpy(acpi_device_class(device), ACPI_VIDEO_CLASS); strcpy(acpi_device_class(device), ACPI_VIDEO_CLASS);
acpi_driver_data(device) = video; device->driver_data = video;
acpi_video_bus_find_cap(video); acpi_video_bus_find_cap(video);
error = acpi_video_bus_check(video); error = acpi_video_bus_check(video);
...@@ -2058,7 +2058,7 @@ static int acpi_video_bus_add(struct acpi_device *device) ...@@ -2058,7 +2058,7 @@ static int acpi_video_bus_add(struct acpi_device *device)
acpi_video_bus_remove_fs(device); acpi_video_bus_remove_fs(device);
err_free_video: err_free_video:
kfree(video); kfree(video);
acpi_driver_data(device) = NULL; device->driver_data = NULL;
return error; return error;
} }
......
...@@ -996,7 +996,7 @@ static int asus_hotk_add(struct acpi_device *device) ...@@ -996,7 +996,7 @@ static int asus_hotk_add(struct acpi_device *device)
hotk->handle = device->handle; hotk->handle = device->handle;
strcpy(acpi_device_name(device), ASUS_HOTK_DEVICE_NAME); strcpy(acpi_device_name(device), ASUS_HOTK_DEVICE_NAME);
strcpy(acpi_device_class(device), ASUS_HOTK_CLASS); strcpy(acpi_device_class(device), ASUS_HOTK_CLASS);
acpi_driver_data(device) = hotk; device->driver_data = hotk;
hotk->device = device; hotk->device = device;
result = asus_hotk_check(); result = asus_hotk_check();
......
...@@ -411,7 +411,7 @@ static int eeepc_hotk_add(struct acpi_device *device) ...@@ -411,7 +411,7 @@ static int eeepc_hotk_add(struct acpi_device *device)
ehotk->handle = device->handle; ehotk->handle = device->handle;
strcpy(acpi_device_name(device), EEEPC_HOTK_DEVICE_NAME); strcpy(acpi_device_name(device), EEEPC_HOTK_DEVICE_NAME);
strcpy(acpi_device_class(device), EEEPC_HOTK_CLASS); strcpy(acpi_device_class(device), EEEPC_HOTK_CLASS);
acpi_driver_data(device) = ehotk; device->driver_data = ehotk;
ehotk->device = device; ehotk->device = device;
result = eeepc_hotk_check(); result = eeepc_hotk_check();
if (result) if (result)
......
...@@ -490,7 +490,7 @@ static int acpi_fujitsu_add(struct acpi_device *device) ...@@ -490,7 +490,7 @@ static int acpi_fujitsu_add(struct acpi_device *device)
fujitsu->acpi_handle = device->handle; fujitsu->acpi_handle = device->handle;
sprintf(acpi_device_name(device), "%s", ACPI_FUJITSU_DEVICE_NAME); sprintf(acpi_device_name(device), "%s", ACPI_FUJITSU_DEVICE_NAME);
sprintf(acpi_device_class(device), "%s", ACPI_FUJITSU_CLASS); sprintf(acpi_device_class(device), "%s", ACPI_FUJITSU_CLASS);
acpi_driver_data(device) = fujitsu; device->driver_data = fujitsu;
status = acpi_install_notify_handler(device->handle, status = acpi_install_notify_handler(device->handle,
ACPI_DEVICE_NOTIFY, ACPI_DEVICE_NOTIFY,
...@@ -703,7 +703,7 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device) ...@@ -703,7 +703,7 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device)
sprintf(acpi_device_name(device), "%s", sprintf(acpi_device_name(device), "%s",
ACPI_FUJITSU_HOTKEY_DEVICE_NAME); ACPI_FUJITSU_HOTKEY_DEVICE_NAME);
sprintf(acpi_device_class(device), "%s", ACPI_FUJITSU_CLASS); sprintf(acpi_device_class(device), "%s", ACPI_FUJITSU_CLASS);
acpi_driver_data(device) = fujitsu_hotkey; device->driver_data = fujitsu_hotkey;
status = acpi_install_notify_handler(device->handle, status = acpi_install_notify_handler(device->handle,
ACPI_DEVICE_NOTIFY, ACPI_DEVICE_NOTIFY,
......
...@@ -175,7 +175,7 @@ static int intel_menlow_memory_add(struct acpi_device *device) ...@@ -175,7 +175,7 @@ static int intel_menlow_memory_add(struct acpi_device *device)
goto end; goto end;
} }
acpi_driver_data(device) = cdev; device->driver_data = cdev;
result = sysfs_create_link(&device->dev.kobj, result = sysfs_create_link(&device->dev.kobj,
&cdev->device.kobj, "thermal_cooling"); &cdev->device.kobj, "thermal_cooling");
if (result) if (result)
......
...@@ -543,7 +543,7 @@ static int __init setup_acpi_notify(struct ibm_struct *ibm) ...@@ -543,7 +543,7 @@ static int __init setup_acpi_notify(struct ibm_struct *ibm)
return -ENODEV; return -ENODEV;
} }
acpi_driver_data(ibm->acpi->device) = ibm; ibm->acpi->device->driver_data = ibm;
sprintf(acpi_device_class(ibm->acpi->device), "%s/%s", sprintf(acpi_device_class(ibm->acpi->device), "%s/%s",
TPACPI_ACPI_EVENT_PREFIX, TPACPI_ACPI_EVENT_PREFIX,
ibm->name); ibm->name);
......
...@@ -300,7 +300,11 @@ struct acpi_device { ...@@ -300,7 +300,11 @@ struct acpi_device {
enum acpi_bus_removal_type removal_type; /* indicate for different removal type */ enum acpi_bus_removal_type removal_type; /* indicate for different removal type */
}; };
#define acpi_driver_data(d) ((d)->driver_data) static inline void *acpi_driver_data(struct acpi_device *d)
{
return d->driver_data;
}
#define to_acpi_device(d) container_of(d, struct acpi_device, dev) #define to_acpi_device(d) container_of(d, struct acpi_device, dev)
#define to_acpi_driver(d) container_of(d, struct acpi_driver, drv) #define to_acpi_driver(d) container_of(d, struct acpi_driver, drv)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册