Module Name: src Committed By: riastradh Date: Sun Dec 19 00:50:11 UTC 2021
Modified Files: src/sys/external/bsd/drm2/include/asm: uaccess.h Log Message: Tweak get_user and put_user. - Add type check to get_user. - Use temporary for put_user, since argument might not be lvalue. - Clarify argument names. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/include/asm/uaccess.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/drm2/include/asm/uaccess.h diff -u src/sys/external/bsd/drm2/include/asm/uaccess.h:1.3 src/sys/external/bsd/drm2/include/asm/uaccess.h:1.4 --- src/sys/external/bsd/drm2/include/asm/uaccess.h:1.3 Sun Sep 10 22:51:48 2017 +++ src/sys/external/bsd/drm2/include/asm/uaccess.h Sun Dec 19 00:50:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: uaccess.h,v 1.3 2017/09/10 22:51:48 maya Exp $ */ +/* $NetBSD: uaccess.h,v 1.4 2021/12/19 00:50:11 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -63,11 +63,14 @@ copy_to_user(void *user_addr, const void return -copyout(kernel_addr, user_addr, len); } -#define get_user(KERNEL_LOC, USER_ADDR) \ - copy_from_user(&(KERNEL_LOC), (USER_ADDR), sizeof(KERNEL_LOC)) - -#define put_user(KERNEL_LOC, USER_ADDR) \ - copy_to_user((USER_ADDR), &(KERNEL_LOC), sizeof(KERNEL_LOC)) +#define get_user(KERNEL_LVAL, USER_PTR) \ + copy_from_user(&(KERNEL_LVAL), (USER_PTR), sizeof(*(USER_PTR)) + \ + 0*sizeof(&(KERNEL_LVAL) - (USER_PTR))) + +#define put_user(KERNEL_RVAL, USER_PTR) ({ \ + const typeof(*(USER_PTR)) __put_user_tmp = (KERNEL_RVAL); \ + copy_to_user((USER_PTR), &__put_user_tmp, sizeof(__put_user_tmp)); \ +}) #if 0 /*