mirror of
https://github.com/torvalds/linux.git
synced 2025-11-05 11:10:22 +02:00
There is a small but annoying bug in scripts/mod/file2alias.c which causes
it to generate invalid aliases for input devices on 64 bit archs. This causes
joydev.ko to not be automaticly loaded when inserting a joystick, resulting in
a non working joystick (for the average user).
In scripts/mod/file2alias.c is the following code for generating the input
aliases:
static void do_input(char *alias,
kernel_ulong_t *arr, unsigned int min, unsigned int max)
{
unsigned int i;
for (i = min; i < max; i++)
if (arr[i / BITS_PER_LONG] & (1 << (i%BITS_PER_LONG)))
sprintf(alias + strlen(alias), "%X,*", i);
}
On 32 bits systems, this correctly generates "0,*" for the first alias, "8,*"
for the second etc.
However on 64 bits it generates: "0,*20,*" resp "8,*28,*" Notice how it adds 20
+ first entry (hex) ! to the list of hex codes, which is 32 more then the first
entry, thus is because the bit test above wraps at 32 bits instead of 64.
scripts/mod/file2alias.c, line 379 reads:
if (arr[i / BITS_PER_LONG] & (1 << (i%BITS_PER_LONG)))
That should be:
if (arr[i / BITS_PER_LONG] & (1L << (i%BITS_PER_LONG)))
Notice the added 'L' after the 1, otherwise that is an 32 bit int instead of a
64 bit long, and when that int gets shifted >= 32 times, appearantly the number
by which to shift is wrapped at 5 bits ( % 32) causing it to test a bit 32 bits
too low.
The patch below makes the nescesarry 1 char change :)
Signed-off-by: Hans de Goede <j.w.r.degoede@hhs.nl>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||
|---|---|---|
| .. | ||
| basic | ||
| genksyms | ||
| kconfig | ||
| ksymoops | ||
| mod | ||
| package | ||
| rt-tester | ||
| .gitignore | ||
| bin2c.c | ||
| binoffset.c | ||
| bloat-o-meter | ||
| checkincludes.pl | ||
| checkstack.pl | ||
| checkversion.pl | ||
| conmakehash.c | ||
| export_report.pl | ||
| extract-ikconfig | ||
| gcc-version.sh | ||
| gen_initramfs_list.sh | ||
| hdrcheck.sh | ||
| kallsyms.c | ||
| Kbuild.include | ||
| kernel-doc | ||
| Lindent | ||
| Makefile | ||
| Makefile.build | ||
| Makefile.clean | ||
| Makefile.headersinst | ||
| Makefile.host | ||
| Makefile.lib | ||
| Makefile.modinst | ||
| Makefile.modpost | ||
| makelst | ||
| mkcompile_h | ||
| mkmakefile | ||
| mksysmap | ||
| mkuboot.sh | ||
| mkversion | ||
| namespace.pl | ||
| patch-kernel | ||
| pnmtologo.c | ||
| profile2linkerlist.pl | ||
| setlocalversion | ||
| show_delta | ||
| ver_linux | ||