]> err.no Git - linux-2.6/commitdiff
Input: fix potential overflows in driver/input/keyboard
authorDmitry Torokhov <dtor_core@ameritech.net>
Mon, 26 Jun 2006 05:46:17 +0000 (01:46 -0400)
committerDmitry Torokhov <dtor_core@ameritech.net>
Mon, 26 Jun 2006 05:46:17 +0000 (01:46 -0400)
Change all sprintfs into snprintfs to make sure we won't stomp on
data adjacent to our buffers.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/keyboard/atkbd.c
drivers/input/keyboard/lkkbd.c
drivers/input/keyboard/newtonkbd.c
drivers/input/keyboard/sunkbd.c
drivers/input/keyboard/xtkbd.c

index fad04b66d268f4188a5ff7af3fa28792a40cd5d2..0eb955ddc65491dc12e34c5d6cd0b37a0a8b1d72 100644 (file)
@@ -776,12 +776,15 @@ static void atkbd_set_device_attrs(struct atkbd *atkbd)
        int i;
 
        if (atkbd->extra)
-               sprintf(atkbd->name, "AT Set 2 Extra keyboard");
+               snprintf(atkbd->name, sizeof(atkbd->name),
+                        "AT Set 2 Extra keyboard");
        else
-               sprintf(atkbd->name, "AT %s Set %d keyboard",
-                       atkbd->translated ? "Translated" : "Raw", atkbd->set);
+               snprintf(atkbd->name, sizeof(atkbd->name),
+                        "AT %s Set %d keyboard",
+                        atkbd->translated ? "Translated" : "Raw", atkbd->set);
 
-       sprintf(atkbd->phys, "%s/input0", atkbd->ps2dev.serio->phys);
+       snprintf(atkbd->phys, sizeof(atkbd->phys),
+                "%s/input0", atkbd->ps2dev.serio->phys);
 
        input_dev->name = atkbd->name;
        input_dev->phys = atkbd->phys;
index 77c4d9669ad04ac44889bf72a185cb81c14c2b9b..5174224cadb469ece8be256dbeff4d7699f4cf2e 100644 (file)
@@ -384,18 +384,21 @@ lkkbd_detection_done (struct lkkbd *lk)
         */
        switch (lk->id[4]) {
                case 1:
-                       sprintf (lk->name, "DEC LK201 keyboard");
+                       strlcpy (lk->name, "DEC LK201 keyboard",
+                                sizeof (lk->name));
 
                        if (lk201_compose_is_alt)
                                lk->keycode[0xb1] = KEY_LEFTALT;
                        break;
 
                case 2:
-                       sprintf (lk->name, "DEC LK401 keyboard");
+                       strlcpy (lk->name, "DEC LK401 keyboard",
+                                sizeof (lk->name));
                        break;
 
                default:
-                       sprintf (lk->name, "Unknown DEC keyboard");
+                       strlcpy (lk->name, "Unknown DEC keyboard",
+                                sizeof (lk->name));
                        printk (KERN_ERR "lkkbd: keyboard on %s is unknown, "
                                        "please report to Jan-Benedict Glaw "
                                        "<jbglaw@lug-owl.de>\n", lk->phys);
index d10983c521e6df006e644c2cbc41020ee636c420..40a3f551247e2db3dfd279ea3f74017a488a1c6e 100644 (file)
@@ -96,7 +96,7 @@ static int nkbd_connect(struct serio *serio, struct serio_driver *drv)
 
        nkbd->serio = serio;
        nkbd->dev = input_dev;
-       sprintf(nkbd->phys, "%s/input0", serio->phys);
+       snprintf(nkbd->phys, sizeof(nkbd->phys), "%s/input0", serio->phys);
        memcpy(nkbd->keycode, nkbd_keycode, sizeof(nkbd->keycode));
 
        input_dev->name = "Newton Keyboard";
index b15b6d8d4f83c5ade9adfc1476332459a296e627..9dbd7b85686d52af9eafaaca6ca35f54b6b935cb 100644 (file)
@@ -263,7 +263,7 @@ static int sunkbd_connect(struct serio *serio, struct serio_driver *drv)
                goto fail;
        }
 
-       sprintf(sunkbd->name, "Sun Type %d keyboard", sunkbd->type);
+       snprintf(sunkbd->name, sizeof(sunkbd->name), "Sun Type %d keyboard", sunkbd->type);
        memcpy(sunkbd->keycode, sunkbd_keycode, sizeof(sunkbd->keycode));
 
        input_dev->name = sunkbd->name;
index 4135e3e16c51ddbe04ef2db79f315e4621b59cb8..0821d53cf0c1d8d9d9538fa0af73f051e14b5d68 100644 (file)
@@ -100,7 +100,7 @@ static int xtkbd_connect(struct serio *serio, struct serio_driver *drv)
 
        xtkbd->serio = serio;
        xtkbd->dev = input_dev;
-       sprintf(xtkbd->phys, "%s/input0", serio->phys);
+       snprintf(xtkbd->phys, sizeof(xtkbd->phys), "%s/input0", serio->phys);
        memcpy(xtkbd->keycode, xtkbd_keycode, sizeof(xtkbd->keycode));
 
        input_dev->name = "XT Keyboard";