Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

staging: dgrp: dgrp_tty.c: Audit the return values of get/put_user()

fix for missing audits for return values of get_user() and put_user().
Inspecting the return values of get/put_user() would make the access_ok()
redundant, hence removing calls to access_ok() in such scenarios.

Signed-off-by: Kumar Amit Mehta <gmate.amit@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Kumar Amit Mehta and committed by
Greg Kroah-Hartman
d53c57dc 3ba89e96

+8 -14
+8 -14
drivers/staging/dgrp/dgrp_tty.c
··· 2265 2265 | ((mlast & DM_RI) ? TIOCM_RNG : 0) 2266 2266 | ((mlast & DM_DSR) ? TIOCM_DSR : 0) 2267 2267 | ((mlast & DM_CTS) ? TIOCM_CTS : 0); 2268 - put_user(mlast, (unsigned int __user *) value); 2269 - 2270 - return 0; 2268 + return put_user(mlast, (unsigned int __user *) value); 2271 2269 } 2272 2270 2273 2271 /* ··· 2283 2285 if (error == 0) 2284 2286 return -EFAULT; 2285 2287 2286 - get_user(arg, (unsigned int __user *) value); 2288 + if (get_user(arg, (unsigned int __user *) value)) 2289 + return -EFAULT; 2287 2290 mval |= ((arg & TIOCM_RTS) ? DM_RTS : 0) 2288 2291 | ((arg & TIOCM_DTR) ? DM_DTR : 0); 2289 2292 ··· 2615 2616 return 0; 2616 2617 2617 2618 case TIOCGSOFTCAR: 2618 - rc = access_ok(VERIFY_WRITE, (void __user *) arg, 2619 - sizeof(long)); 2620 - if (rc == 0) 2621 - return -EFAULT; 2622 - put_user(C_CLOCAL(tty) ? 1 : 0, (unsigned long __user *) arg); 2623 - return 0; 2619 + return put_user(C_CLOCAL(tty) ? 1 : 0, 2620 + (unsigned long __user *) arg); 2624 2621 2625 2622 case TIOCMGET: 2626 2623 rc = access_ok(VERIFY_WRITE, (void __user *) arg, ··· 2839 2844 break; 2840 2845 2841 2846 case DIGI_GETCUSTOMBAUD: 2842 - rc = access_ok(VERIFY_WRITE, (void __user *) arg, sizeof(int)); 2843 - if (rc == 0) 2847 + if (put_user(ch->ch_custom_speed, (unsigned int __user *) arg)) 2844 2848 return -EFAULT; 2845 - put_user(ch->ch_custom_speed, (unsigned int __user *) arg); 2846 2849 break; 2847 2850 2848 2851 case DIGI_SETCUSTOMBAUD: 2849 2852 { 2850 2853 int new_rate; 2851 2854 2852 - get_user(new_rate, (unsigned int __user *) arg); 2855 + if (get_user(new_rate, (unsigned int __user *) arg)) 2856 + return -EFAULT; 2853 2857 dgrp_set_custom_speed(ch, new_rate); 2854 2858 2855 2859 break;