lkml.org 
[lkml]   [2005]   [Oct]   [20]   [last100]   RSS-feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Complete thread (EXPERIMENTAL)
/
DateThu, 20 Oct 2005 13:27:27 +0200
FromJiri Slaby <>
SubjectRe: [PATCH] `unaligned access' in acpi get_root_bridge_busnr()
Digg This
Peter Chubb napsal(a):

In drivers/acpi/glue.c the address of an integer is cast to the address of an unsigned long. This breaks on systems where a long is larger than an int --- for a start the int can be misaligned; for a second the assignment through the pointer will overwrite part of the next variable.

Patch is against linux-2.6.14-rc4

Signed-off-by: Peter Chubb <peterc@gelato.unsw.edu.au>
Index: linux-2.6-import/drivers/acpi/glue.c
=================================================================== --- linux-2.6-import.orig/drivers/acpi/glue.c 2005-09-09 09:08:49.928854100 +1000 +++ linux-2.6-import/drivers/acpi/glue.c 2005-10-20 13:32:32.126445742 +1000 @@ -89,46 +89,46 @@ static int acpi_find_bridge_device(struc /* Get PCI root bridge's handle from its segment and bus number */ struct acpi_find_pci_root {
unsigned int seg;
unsigned int bus;
acpi_handle handle;
};

static acpi_status
do_root_bridge_busnr_callback(struct acpi_resource *resource, void *data) {
- int *busnr = (int *)data;
+ unsigned long *busnr = (unsigned long *)data;


Is the cast here really needed?

regards,

-- 
Jiri Slaby         www.fi.muni.cz/~xslaby
~\-/~      jirislaby@gmail.com      ~\-/~
B67499670407CE62ACC8 22A032CC55C339D47A7E

\
ISP Services
Valid XHTML 1.0!\ /
Valid CSS! Last update: 2005-10-20 11:29    [W:0.117 / U:9.500 seconds]
©2003-2005 Jasper Spaans