Loading drivers/tty/vt/consolemap.c +16 −40 Original line number Diff line number Diff line Loading @@ -322,15 +322,13 @@ int con_set_trans_old(unsigned char __user * arg) { int i; unsigned short inbuf[E_TABSZ]; unsigned char ubuf[E_TABSZ]; if (!access_ok(VERIFY_READ, arg, E_TABSZ)) if (copy_from_user(ubuf, arg, E_TABSZ)) return -EFAULT; for (i = 0; i < E_TABSZ ; i++) { unsigned char uc; __get_user(uc, arg+i); inbuf[i] = UNI_DIRECT_BASE | uc; } for (i = 0; i < E_TABSZ ; i++) inbuf[i] = UNI_DIRECT_BASE | ubuf[i]; console_lock(); memcpy(translations[USER_MAP], inbuf, sizeof(inbuf)); Loading @@ -345,9 +343,6 @@ int con_get_trans_old(unsigned char __user * arg) unsigned short *p = translations[USER_MAP]; unsigned char outbuf[E_TABSZ]; if (!access_ok(VERIFY_WRITE, arg, E_TABSZ)) return -EFAULT; console_lock(); for (i = 0; i < E_TABSZ ; i++) { Loading @@ -356,22 +351,16 @@ int con_get_trans_old(unsigned char __user * arg) } console_unlock(); for (i = 0; i < E_TABSZ ; i++) __put_user(outbuf[i], arg+i); return 0; return copy_to_user(arg, outbuf, sizeof(outbuf)) ? -EFAULT : 0; } int con_set_trans_new(ushort __user * arg) { int i; unsigned short inbuf[E_TABSZ]; if (!access_ok(VERIFY_READ, arg, E_TABSZ*sizeof(unsigned short))) if (copy_from_user(inbuf, arg, sizeof(inbuf))) return -EFAULT; for (i = 0; i < E_TABSZ ; i++) __get_user(inbuf[i], arg+i); console_lock(); memcpy(translations[USER_MAP], inbuf, sizeof(inbuf)); update_user_maps(); Loading @@ -381,19 +370,13 @@ int con_set_trans_new(ushort __user * arg) int con_get_trans_new(ushort __user * arg) { int i; unsigned short outbuf[E_TABSZ]; if (!access_ok(VERIFY_WRITE, arg, E_TABSZ*sizeof(unsigned short))) return -EFAULT; console_lock(); memcpy(outbuf, translations[USER_MAP], sizeof(outbuf)); console_unlock(); for (i = 0; i < E_TABSZ ; i++) __put_user(outbuf[i], arg+i); return 0; return copy_to_user(arg, outbuf, sizeof(outbuf)) ? -EFAULT : 0; } /* Loading Loading @@ -557,14 +540,9 @@ int con_set_unimap(struct vc_data *vc, ushort ct, struct unipair __user *list) if (!ct) return 0; unilist = kmalloc_array(ct, sizeof(struct unipair), GFP_KERNEL); if (!unilist) return -ENOMEM; for (i = ct, plist = unilist; i; i--, plist++, list++) { __get_user(plist->unicode, &list->unicode); __get_user(plist->fontpos, &list->fontpos); } unilist = memdup_user(list, ct * sizeof(struct unipair)); if (IS_ERR(unilist)) return PTR_ERR(unilist); console_lock(); Loading Loading @@ -757,11 +735,11 @@ EXPORT_SYMBOL(con_copy_unimap); */ int con_get_unimap(struct vc_data *vc, ushort ct, ushort __user *uct, struct unipair __user *list) { int i, j, k; int i, j, k, ret = 0; ushort ect; u16 **p1, *p2; struct uni_pagedir *p; struct unipair *unilist, *plist; struct unipair *unilist; unilist = kmalloc_array(ct, sizeof(struct unipair), GFP_KERNEL); if (!unilist) Loading Loading @@ -792,13 +770,11 @@ int con_get_unimap(struct vc_data *vc, ushort ct, ushort __user *uct, struct uni } } console_unlock(); for (i = min(ect, ct), plist = unilist; i; i--, list++, plist++) { __put_user(plist->unicode, &list->unicode); __put_user(plist->fontpos, &list->fontpos); } __put_user(ect, uct); if (copy_to_user(list, unilist, min(ect, ct) * sizeof(struct unipair))) ret = -EFAULT; put_user(ect, uct); kfree(unilist); return ((ect <= ct) ? 0 : -ENOMEM); return ret ? ret : (ect <= ct) ? 0 : -ENOMEM; } /* Loading drivers/tty/vt/vt.c +3 −3 Original line number Diff line number Diff line Loading @@ -2709,13 +2709,13 @@ int tioclinux(struct tty_struct *tty, unsigned long arg) * related to the kernel should not use this. */ data = vt_get_shift_state(); ret = __put_user(data, p); ret = put_user(data, p); break; case TIOCL_GETMOUSEREPORTING: console_lock(); /* May be overkill */ data = mouse_reporting(); console_unlock(); ret = __put_user(data, p); ret = put_user(data, p); break; case TIOCL_SETVESABLANK: console_lock(); Loading @@ -2724,7 +2724,7 @@ int tioclinux(struct tty_struct *tty, unsigned long arg) break; case TIOCL_GETKMSGREDIRECT: data = vt_get_kmsg_redirect(); ret = __put_user(data, p); ret = put_user(data, p); break; case TIOCL_SETKMSGREDIRECT: if (!capable(CAP_SYS_ADMIN)) { Loading drivers/tty/vt/vt_ioctl.c +0 −8 Original line number Diff line number Diff line Loading @@ -266,10 +266,6 @@ do_unimap_ioctl(int cmd, struct unimapdesc __user *user_ud, int perm, struct vc_ if (copy_from_user(&tmp, user_ud, sizeof tmp)) return -EFAULT; if (tmp.entries) if (!access_ok(VERIFY_WRITE, tmp.entries, tmp.entry_ct*sizeof(struct unipair))) return -EFAULT; switch (cmd) { case PIO_UNIMAP: if (!perm) Loading Loading @@ -1170,10 +1166,6 @@ compat_unimap_ioctl(unsigned int cmd, struct compat_unimapdesc __user *user_ud, if (copy_from_user(&tmp, user_ud, sizeof tmp)) return -EFAULT; tmp_entries = compat_ptr(tmp.entries); if (tmp_entries) if (!access_ok(VERIFY_WRITE, tmp_entries, tmp.entry_ct*sizeof(struct unipair))) return -EFAULT; switch (cmd) { case PIO_UNIMAP: if (!perm) Loading Loading
drivers/tty/vt/consolemap.c +16 −40 Original line number Diff line number Diff line Loading @@ -322,15 +322,13 @@ int con_set_trans_old(unsigned char __user * arg) { int i; unsigned short inbuf[E_TABSZ]; unsigned char ubuf[E_TABSZ]; if (!access_ok(VERIFY_READ, arg, E_TABSZ)) if (copy_from_user(ubuf, arg, E_TABSZ)) return -EFAULT; for (i = 0; i < E_TABSZ ; i++) { unsigned char uc; __get_user(uc, arg+i); inbuf[i] = UNI_DIRECT_BASE | uc; } for (i = 0; i < E_TABSZ ; i++) inbuf[i] = UNI_DIRECT_BASE | ubuf[i]; console_lock(); memcpy(translations[USER_MAP], inbuf, sizeof(inbuf)); Loading @@ -345,9 +343,6 @@ int con_get_trans_old(unsigned char __user * arg) unsigned short *p = translations[USER_MAP]; unsigned char outbuf[E_TABSZ]; if (!access_ok(VERIFY_WRITE, arg, E_TABSZ)) return -EFAULT; console_lock(); for (i = 0; i < E_TABSZ ; i++) { Loading @@ -356,22 +351,16 @@ int con_get_trans_old(unsigned char __user * arg) } console_unlock(); for (i = 0; i < E_TABSZ ; i++) __put_user(outbuf[i], arg+i); return 0; return copy_to_user(arg, outbuf, sizeof(outbuf)) ? -EFAULT : 0; } int con_set_trans_new(ushort __user * arg) { int i; unsigned short inbuf[E_TABSZ]; if (!access_ok(VERIFY_READ, arg, E_TABSZ*sizeof(unsigned short))) if (copy_from_user(inbuf, arg, sizeof(inbuf))) return -EFAULT; for (i = 0; i < E_TABSZ ; i++) __get_user(inbuf[i], arg+i); console_lock(); memcpy(translations[USER_MAP], inbuf, sizeof(inbuf)); update_user_maps(); Loading @@ -381,19 +370,13 @@ int con_set_trans_new(ushort __user * arg) int con_get_trans_new(ushort __user * arg) { int i; unsigned short outbuf[E_TABSZ]; if (!access_ok(VERIFY_WRITE, arg, E_TABSZ*sizeof(unsigned short))) return -EFAULT; console_lock(); memcpy(outbuf, translations[USER_MAP], sizeof(outbuf)); console_unlock(); for (i = 0; i < E_TABSZ ; i++) __put_user(outbuf[i], arg+i); return 0; return copy_to_user(arg, outbuf, sizeof(outbuf)) ? -EFAULT : 0; } /* Loading Loading @@ -557,14 +540,9 @@ int con_set_unimap(struct vc_data *vc, ushort ct, struct unipair __user *list) if (!ct) return 0; unilist = kmalloc_array(ct, sizeof(struct unipair), GFP_KERNEL); if (!unilist) return -ENOMEM; for (i = ct, plist = unilist; i; i--, plist++, list++) { __get_user(plist->unicode, &list->unicode); __get_user(plist->fontpos, &list->fontpos); } unilist = memdup_user(list, ct * sizeof(struct unipair)); if (IS_ERR(unilist)) return PTR_ERR(unilist); console_lock(); Loading Loading @@ -757,11 +735,11 @@ EXPORT_SYMBOL(con_copy_unimap); */ int con_get_unimap(struct vc_data *vc, ushort ct, ushort __user *uct, struct unipair __user *list) { int i, j, k; int i, j, k, ret = 0; ushort ect; u16 **p1, *p2; struct uni_pagedir *p; struct unipair *unilist, *plist; struct unipair *unilist; unilist = kmalloc_array(ct, sizeof(struct unipair), GFP_KERNEL); if (!unilist) Loading Loading @@ -792,13 +770,11 @@ int con_get_unimap(struct vc_data *vc, ushort ct, ushort __user *uct, struct uni } } console_unlock(); for (i = min(ect, ct), plist = unilist; i; i--, list++, plist++) { __put_user(plist->unicode, &list->unicode); __put_user(plist->fontpos, &list->fontpos); } __put_user(ect, uct); if (copy_to_user(list, unilist, min(ect, ct) * sizeof(struct unipair))) ret = -EFAULT; put_user(ect, uct); kfree(unilist); return ((ect <= ct) ? 0 : -ENOMEM); return ret ? ret : (ect <= ct) ? 0 : -ENOMEM; } /* Loading
drivers/tty/vt/vt.c +3 −3 Original line number Diff line number Diff line Loading @@ -2709,13 +2709,13 @@ int tioclinux(struct tty_struct *tty, unsigned long arg) * related to the kernel should not use this. */ data = vt_get_shift_state(); ret = __put_user(data, p); ret = put_user(data, p); break; case TIOCL_GETMOUSEREPORTING: console_lock(); /* May be overkill */ data = mouse_reporting(); console_unlock(); ret = __put_user(data, p); ret = put_user(data, p); break; case TIOCL_SETVESABLANK: console_lock(); Loading @@ -2724,7 +2724,7 @@ int tioclinux(struct tty_struct *tty, unsigned long arg) break; case TIOCL_GETKMSGREDIRECT: data = vt_get_kmsg_redirect(); ret = __put_user(data, p); ret = put_user(data, p); break; case TIOCL_SETKMSGREDIRECT: if (!capable(CAP_SYS_ADMIN)) { Loading
drivers/tty/vt/vt_ioctl.c +0 −8 Original line number Diff line number Diff line Loading @@ -266,10 +266,6 @@ do_unimap_ioctl(int cmd, struct unimapdesc __user *user_ud, int perm, struct vc_ if (copy_from_user(&tmp, user_ud, sizeof tmp)) return -EFAULT; if (tmp.entries) if (!access_ok(VERIFY_WRITE, tmp.entries, tmp.entry_ct*sizeof(struct unipair))) return -EFAULT; switch (cmd) { case PIO_UNIMAP: if (!perm) Loading Loading @@ -1170,10 +1166,6 @@ compat_unimap_ioctl(unsigned int cmd, struct compat_unimapdesc __user *user_ud, if (copy_from_user(&tmp, user_ud, sizeof tmp)) return -EFAULT; tmp_entries = compat_ptr(tmp.entries); if (tmp_entries) if (!access_ok(VERIFY_WRITE, tmp_entries, tmp.entry_ct*sizeof(struct unipair))) return -EFAULT; switch (cmd) { case PIO_UNIMAP: if (!perm) Loading