git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
s390
/
char
/
keyboard.c
diff --git
a/drivers/s390/char/keyboard.c
b/drivers/s390/char/keyboard.c
index
5e35728
..
3e86fd1
100644
(file)
--- a/
drivers/s390/char/keyboard.c
+++ b/
drivers/s390/char/keyboard.c
@@
-7,7
+7,6
@@
* Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
*/
* Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
*/
-#include <linux/config.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/sysrq.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/sysrq.h>
@@
-32,11
+31,11
@@
static k_handler_fn K_HANDLERS;
static k_handler_fn *k_handler[16] = { K_HANDLERS };
/* maximum values each key_handler can handle */
static k_handler_fn *k_handler[16] = { K_HANDLERS };
/* maximum values each key_handler can handle */
-static const int max_vals[] = {
+static const int
kbd_
max_vals[] = {
255, ARRAY_SIZE(func_table) - 1, NR_FN_HANDLER - 1, 0,
NR_DEAD - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
255, ARRAY_SIZE(func_table) - 1, NR_FN_HANDLER - 1, 0,
NR_DEAD - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static const int
NR_TYPES = ARRAY_SIZE(
max_vals);
+static const int
KBD_NR_TYPES = ARRAY_SIZE(kbd_
max_vals);
static unsigned char ret_diacr[NR_DEAD] = {
'`', '\'', '^', '~', '"', ','
static unsigned char ret_diacr[NR_DEAD] = {
'`', '\'', '^', '~', '"', ','
@@
-50,14
+49,12
@@
kbd_alloc(void) {
struct kbd_data *kbd;
int i, len;
struct kbd_data *kbd;
int i, len;
- kbd = k
m
alloc(sizeof(struct kbd_data), GFP_KERNEL);
+ kbd = k
z
alloc(sizeof(struct kbd_data), GFP_KERNEL);
if (!kbd)
goto out;
if (!kbd)
goto out;
- memset(kbd, 0, sizeof(struct kbd_data));
- kbd->key_maps = kmalloc(sizeof(key_maps), GFP_KERNEL);
- if (!key_maps)
+ kbd->key_maps = kzalloc(sizeof(key_maps), GFP_KERNEL);
+ if (!kbd->key_maps)
goto out_kbd;
goto out_kbd;
- memset(kbd->key_maps, 0, sizeof(key_maps));
for (i = 0; i < ARRAY_SIZE(key_maps); i++) {
if (key_maps[i]) {
kbd->key_maps[i] =
for (i = 0; i < ARRAY_SIZE(key_maps); i++) {
if (key_maps[i]) {
kbd->key_maps[i] =
@@
-68,10
+65,9
@@
kbd_alloc(void) {
sizeof(u_short)*NR_KEYS);
}
}
sizeof(u_short)*NR_KEYS);
}
}
- kbd->func_table = k
m
alloc(sizeof(func_table), GFP_KERNEL);
+ kbd->func_table = k
z
alloc(sizeof(func_table), GFP_KERNEL);
if (!kbd->func_table)
goto out_maps;
if (!kbd->func_table)
goto out_maps;
- memset(kbd->func_table, 0, sizeof(func_table));
for (i = 0; i < ARRAY_SIZE(func_table); i++) {
if (func_table[i]) {
len = strlen(func_table[i]) + 1;
for (i = 0; i < ARRAY_SIZE(func_table); i++) {
if (func_table[i]) {
len = strlen(func_table[i]) + 1;
@@
-82,10
+78,9
@@
kbd_alloc(void) {
}
}
kbd->fn_handler =
}
}
kbd->fn_handler =
- k
m
alloc(sizeof(fn_handler_fn *) * NR_FN_HANDLER, GFP_KERNEL);
+ k
z
alloc(sizeof(fn_handler_fn *) * NR_FN_HANDLER, GFP_KERNEL);
if (!kbd->fn_handler)
goto out_func;
if (!kbd->fn_handler)
goto out_func;
- memset(kbd->fn_handler, 0, sizeof(fn_handler_fn *) * NR_FN_HANDLER);
kbd->accent_table =
kmalloc(sizeof(struct kbdiacr)*MAX_DIACR, GFP_KERNEL);
if (!kbd->accent_table)
kbd->accent_table =
kmalloc(sizeof(struct kbdiacr)*MAX_DIACR, GFP_KERNEL);
if (!kbd->accent_table)
@@
-99,18
+94,16
@@
out_fn_handler:
kfree(kbd->fn_handler);
out_func:
for (i = 0; i < ARRAY_SIZE(func_table); i++)
kfree(kbd->fn_handler);
out_func:
for (i = 0; i < ARRAY_SIZE(func_table); i++)
- if (kbd->func_table[i])
- kfree(kbd->func_table[i]);
+ kfree(kbd->func_table[i]);
kfree(kbd->func_table);
out_maps:
for (i = 0; i < ARRAY_SIZE(key_maps); i++)
kfree(kbd->func_table);
out_maps:
for (i = 0; i < ARRAY_SIZE(key_maps); i++)
- if (kbd->key_maps[i])
- kfree(kbd->key_maps[i]);
+ kfree(kbd->key_maps[i]);
kfree(kbd->key_maps);
out_kbd:
kfree(kbd);
out:
kfree(kbd->key_maps);
out_kbd:
kfree(kbd);
out:
- return
0
;
+ return
NULL
;
}
void
}
void
@@
-121,12
+114,10
@@
kbd_free(struct kbd_data *kbd)
kfree(kbd->accent_table);
kfree(kbd->fn_handler);
for (i = 0; i < ARRAY_SIZE(func_table); i++)
kfree(kbd->accent_table);
kfree(kbd->fn_handler);
for (i = 0; i < ARRAY_SIZE(func_table); i++)
- if (kbd->func_table[i])
- kfree(kbd->func_table[i]);
+ kfree(kbd->func_table[i]);
kfree(kbd->func_table);
for (i = 0; i < ARRAY_SIZE(key_maps); i++)
kfree(kbd->func_table);
for (i = 0; i < ARRAY_SIZE(key_maps); i++)
- if (kbd->key_maps[i])
- kfree(kbd->key_maps[i]);
+ kfree(kbd->key_maps[i]);
kfree(kbd->key_maps);
kfree(kbd);
}
kfree(kbd->key_maps);
kfree(kbd);
}
@@
-313,7
+304,7
@@
kbd_keycode(struct kbd_data *kbd, unsigned int keycode)
if (kbd->sysrq) {
if (kbd->sysrq == K(KT_LATIN, '-')) {
kbd->sysrq = 0;
if (kbd->sysrq) {
if (kbd->sysrq == K(KT_LATIN, '-')) {
kbd->sysrq = 0;
- handle_sysrq(value,
0,
kbd->tty);
+ handle_sysrq(value, kbd->tty);
return;
}
if (value == '-') {
return;
}
if (value == '-') {
@@
-360,7
+351,7
@@
do_kdsk_ioctl(struct kbd_data *kbd, struct kbentry __user *user_kbe,
key_map = kbd->key_maps[tmp.kb_table];
if (key_map) {
val = U(key_map[tmp.kb_index]);
key_map = kbd->key_maps[tmp.kb_table];
if (key_map) {
val = U(key_map[tmp.kb_index]);
- if (KTYP(val) >= NR_TYPES)
+ if (KTYP(val) >=
KBD_
NR_TYPES)
val = K_HOLE;
} else
val = (tmp.kb_index ? K_HOLE : K_NOSUCHMAP);
val = K_HOLE;
} else
val = (tmp.kb_index ? K_HOLE : K_NOSUCHMAP);
@@
-372,21
+363,21
@@
do_kdsk_ioctl(struct kbd_data *kbd, struct kbentry __user *user_kbe,
/* disallocate map */
key_map = kbd->key_maps[tmp.kb_table];
if (key_map) {
/* disallocate map */
key_map = kbd->key_maps[tmp.kb_table];
if (key_map) {
- kbd->key_maps[tmp.kb_table] =
0
;
+ kbd->key_maps[tmp.kb_table] =
NULL
;
kfree(key_map);
}
break;
}
kfree(key_map);
}
break;
}
- if (KTYP(tmp.kb_value) >= NR_TYPES)
+ if (KTYP(tmp.kb_value) >=
KBD_
NR_TYPES)
return -EINVAL;
return -EINVAL;
- if (KVAL(tmp.kb_value) > max_vals[KTYP(tmp.kb_value)])
+ if (KVAL(tmp.kb_value) >
kbd_
max_vals[KTYP(tmp.kb_value)])
return -EINVAL;
if (!(key_map = kbd->key_maps[tmp.kb_table])) {
int j;
return -EINVAL;
if (!(key_map = kbd->key_maps[tmp.kb_table])) {
int j;
- key_map =
(ushort *)
kmalloc(sizeof(plain_map),
+ key_map = kmalloc(sizeof(plain_map),
GFP_KERNEL);
if (!key_map)
return -ENOMEM;
GFP_KERNEL);
if (!key_map)
return -ENOMEM;
@@
-444,7
+435,11
@@
do_kdgkb_ioctl(struct kbd_data *kbd, struct kbsentry __user *u_kbs,
return -EPERM;
len = strnlen_user(u_kbs->kb_string,
sizeof(u_kbs->kb_string) - 1);
return -EPERM;
len = strnlen_user(u_kbs->kb_string,
sizeof(u_kbs->kb_string) - 1);
- p = kmalloc(len, GFP_KERNEL);
+ if (!len)
+ return -EFAULT;
+ if (len > sizeof(u_kbs->kb_string) - 1)
+ return -EINVAL;
+ p = kmalloc(len + 1, GFP_KERNEL);
if (!p)
return -ENOMEM;
if (copy_from_user(p, u_kbs->kb_string, len)) {
if (!p)
return -ENOMEM;
if (copy_from_user(p, u_kbs->kb_string, len)) {
@@
-452,8
+447,7
@@
do_kdgkb_ioctl(struct kbd_data *kbd, struct kbsentry __user *u_kbs,
return -EFAULT;
}
p[len] = 0;
return -EFAULT;
}
p[len] = 0;
- if (kbd->func_table[kb_func])
- kfree(kbd->func_table[kb_func]);
+ kfree(kbd->func_table[kb_func]);
kbd->func_table[kb_func] = p;
break;
}
kbd->func_table[kb_func] = p;
break;
}