lkml.org 
[lkml]   [2007]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH BUGFIX] hid: the `bit' in hidinput_mapping_quirks() is an out parameter
    Fix a panic, by changing 
    hidinput_mapping_quirks(,, unsigned long *bit,)
    to
    hidinput_mapping_quirks(,, unsigned long **bit,)

    The `bit' in this function is an out parameter.

    Cc: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Fengguang Wu <wfg@mail.ustc.edu.cn>
    ---
    drivers/hid/hid-input-quirks.c | 36 +++++++++++++++----------------
    drivers/hid/hid-input.c | 2 -
    include/linux/hid.h | 2 -
    3 files changed, 20 insertions(+), 20 deletions(-)

    --- linux-2.6.24-rc4-mm1.orig/include/linux/hid.h
    +++ linux-2.6.24-rc4-mm1/include/linux/hid.h
    @@ -526,7 +526,7 @@ extern void hidinput_disconnect(struct h
    int hid_set_field(struct hid_field *, unsigned, __s32);
    int hid_input_report(struct hid_device *, int type, u8 *, int, int);
    int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field);
    -int hidinput_mapping_quirks(struct hid_usage *, struct input_dev *, unsigned long *, int *);
    +int hidinput_mapping_quirks(struct hid_usage *, struct input_dev *, unsigned long **, int *);
    void hidinput_event_quirks(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
    int hidinput_apple_event(struct hid_device *, struct input_dev *, struct hid_usage *, __s32);
    void hid_input_field(struct hid_device *hid, struct hid_field *field, __u8 *data, int interrupt);
    --- linux-2.6.24-rc4-mm1.orig/drivers/hid/hid-input.c
    +++ linux-2.6.24-rc4-mm1/drivers/hid/hid-input.c
    @@ -382,7 +382,7 @@ static void hidinput_configure_usage(str
    }

    /* handle input mappings for quirky devices */
    - ret = hidinput_mapping_quirks(usage, input, bit, &max);
    + ret = hidinput_mapping_quirks(usage, input, &bit, &max);
    if (ret)
    goto mapped;

    --- linux-2.6.24-rc4-mm1.orig/drivers/hid/hid-input-quirks.c
    +++ linux-2.6.24-rc4-mm1/drivers/hid/hid-input-quirks.c
    @@ -16,16 +16,16 @@
    #include <linux/input.h>
    #include <linux/hid.h>

    -#define map_abs(c) do { usage->code = c; usage->type = EV_ABS; bit = input->absbit; *max = ABS_MAX; } while (0)
    -#define map_rel(c) do { usage->code = c; usage->type = EV_REL; bit = input->relbit; *max = REL_MAX; } while (0)
    -#define map_key(c) do { usage->code = c; usage->type = EV_KEY; bit = input->keybit; *max = KEY_MAX; } while (0)
    -#define map_led(c) do { usage->code = c; usage->type = EV_LED; bit = input->ledbit; *max = LED_MAX; } while (0)
    +#define map_abs(c) do { usage->code = c; usage->type = EV_ABS; *bit = input->absbit; *max = ABS_MAX; } while (0)
    +#define map_rel(c) do { usage->code = c; usage->type = EV_REL; *bit = input->relbit; *max = REL_MAX; } while (0)
    +#define map_key(c) do { usage->code = c; usage->type = EV_KEY; *bit = input->keybit; *max = KEY_MAX; } while (0)
    +#define map_led(c) do { usage->code = c; usage->type = EV_LED; *bit = input->ledbit; *max = LED_MAX; } while (0)

    -#define map_abs_clear(c) do { map_abs(c); clear_bit(c, bit); } while (0)
    -#define map_key_clear(c) do { map_key(c); clear_bit(c, bit); } while (0)
    +#define map_abs_clear(c) do { map_abs(c); clear_bit(c, *bit); } while (0)
    +#define map_key_clear(c) do { map_key(c); clear_bit(c, *bit); } while (0)

    static int quirk_belkin_wkbd(struct hid_usage *usage, struct input_dev *input,
    - unsigned long *bit, int *max)
    + unsigned long **bit, int *max)
    {
    if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER)
    return 0;
    @@ -41,7 +41,7 @@ static int quirk_belkin_wkbd(struct hid_
    }

    static int quirk_cherry_cymotion(struct hid_usage *usage, struct input_dev *input,
    - unsigned long *bit, int *max)
    + unsigned long **bit, int *max)
    {
    if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER)
    return 0;
    @@ -57,7 +57,7 @@ static int quirk_cherry_cymotion(struct
    }

    static int quirk_logitech_ultrax_remote(struct hid_usage *usage, struct input_dev *input,
    - unsigned long *bit, int *max)
    + unsigned long **bit, int *max)
    {
    if ((usage->hid & HID_USAGE_PAGE) != HID_UP_LOGIVENDOR)
    return 0;
    @@ -90,7 +90,7 @@ static int quirk_logitech_ultrax_remote(
    }

    static int quirk_chicony_tactical_pad(struct hid_usage *usage, struct input_dev *input,
    - unsigned long *bit, int *max)
    + unsigned long **bit, int *max)
    {
    if ((usage->hid & HID_USAGE_PAGE) != HID_UP_MSVENDOR)
    return 0;
    @@ -115,7 +115,7 @@ static int quirk_chicony_tactical_pad(st
    }

    static int quirk_microsoft_ergonomy_kb(struct hid_usage *usage, struct input_dev *input,
    - unsigned long *bit, int *max)
    + unsigned long **bit, int *max)
    {
    if ((usage->hid & HID_USAGE_PAGE) != HID_UP_MSVENDOR)
    return 0;
    @@ -138,7 +138,7 @@ static int quirk_microsoft_ergonomy_kb(s
    }

    static int quirk_microsoft_presenter_8k(struct hid_usage *usage, struct input_dev *input,
    - unsigned long *bit, int *max)
    + unsigned long **bit, int *max)
    {
    if ((usage->hid & HID_USAGE_PAGE) != HID_UP_MSVENDOR)
    return 0;
    @@ -156,7 +156,7 @@ static int quirk_microsoft_presenter_8k(
    }

    static int quirk_petalynx_remote(struct hid_usage *usage, struct input_dev *input,
    - unsigned long *bit, int *max)
    + unsigned long **bit, int *max)
    {
    if (((usage->hid & HID_USAGE_PAGE) != HID_UP_LOGIVENDOR) &&
    ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER))
    @@ -184,7 +184,7 @@ static int quirk_petalynx_remote(struct
    }

    static int quirk_logitech_wireless(struct hid_usage *usage, struct input_dev *input,
    - unsigned long *bit, int *max)
    + unsigned long **bit, int *max)
    {
    if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER)
    return 0;
    @@ -236,7 +236,7 @@ static int quirk_logitech_wireless(struc
    }

    static int quirk_cherry_genius_29e(struct hid_usage *usage, struct input_dev *input,
    - unsigned long *bit, int *max)
    + unsigned long **bit, int *max)
    {
    if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER)
    return 0;
    @@ -254,7 +254,7 @@ static int quirk_cherry_genius_29e(struc
    }

    static int quirk_btc_8193(struct hid_usage *usage, struct input_dev *input,
    - unsigned long *bit, int *max)
    + unsigned long **bit, int *max)
    {
    if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER)
    return 0;
    @@ -307,7 +307,7 @@ static int quirk_btc_8193(struct hid_usa
    static const struct hid_input_blacklist {
    __u16 idVendor;
    __u16 idProduct;
    - int (*quirk)(struct hid_usage *, struct input_dev *, unsigned long *, int *);
    + int (*quirk)(struct hid_usage *, struct input_dev *, unsigned long **, int *);
    } hid_input_blacklist[] = {
    { VENDOR_ID_BELKIN, DEVICE_ID_BELKIN_WIRELESS_KEYBOARD, quirk_belkin_wkbd },

    @@ -335,7 +335,7 @@ static const struct hid_input_blacklist

    int hidinput_mapping_quirks(struct hid_usage *usage,
    struct input_dev *input,
    - unsigned long *bit, int *max)
    + unsigned long **bit, int *max)
    {
    struct hid_device *device = input_get_drvdata(input);
    int i = 0;


    \
     
     \ /
      Last update: 2007-12-07 15:23    [W:0.029 / U:3.088 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site