Skip to content

Commit

Permalink
[PATCH] `unaligned access' in acpi get_root_bridge_busnr()
Browse files Browse the repository at this point in the history
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.

Signed-off-by: Peter Chubb <peterc@gelato.unsw.edu.au>
Acked-by: "Brown, Len" <len.brown@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Peter Chubb authored and Linus Torvalds committed Oct 20, 2005
1 parent 11909d6 commit 51b190b
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions drivers/acpi/glue.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ struct acpi_find_pci_root {
static acpi_status
do_root_bridge_busnr_callback(struct acpi_resource *resource, void *data)
{
int *busnr = (int *)data;
unsigned long *busnr = (unsigned long *)data;
struct acpi_resource_address64 address;

if (resource->id != ACPI_RSTYPE_ADDRESS16 &&
Expand All @@ -115,13 +115,13 @@ do_root_bridge_busnr_callback(struct acpi_resource *resource, void *data)
static int get_root_bridge_busnr(acpi_handle handle)
{
acpi_status status;
int bus, bbn;
unsigned long bus, bbn;
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };

acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);

status = acpi_evaluate_integer(handle, METHOD_NAME__BBN, NULL,
(unsigned long *)&bbn);
&bbn);
if (status == AE_NOT_FOUND) {
/* Assume bus = 0 */
printk(KERN_INFO PREFIX
Expand Down Expand Up @@ -153,7 +153,7 @@ static int get_root_bridge_busnr(acpi_handle handle)
}
exit:
acpi_os_free(buffer.pointer);
return bbn;
return (int)bbn;
}

static acpi_status
Expand Down

0 comments on commit 51b190b

Please sign in to comment.