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
 /*

Reply via email to