From c64a87cede3b070573ed0062d98fc33be34111b8 Mon Sep 17 00:00:00 2001 From: Frank Zago Date: Wed, 23 Jul 2014 16:03:30 -0500 Subject: [PATCH] LU-5396 libcfs: add sparse annotation __user wherever needed This fixes sparse warnings such as: .../api-ni.c:1639:33: warning: incorrect type in argument 3 (different address spaces) .../api-ni.c:1639:33: expected struct lnet_process_id_t [noderef] [usertype] *ids .../api-ni.c:1639:33: got struct lnet_process_id_t [usertype] * There is no code change. Change-Id: I07a40b3e2f5bf179923c57d9eda86b4921cd7699 Signed-off-by: frank zago Reviewed-on: http://review.whamcloud.com/11817 Tested-by: Jenkins Reviewed-by: James Simmons Tested-by: Maloo Reviewed-by: John L. Hammond Reviewed-by: Dmitry Eremin Reviewed-by: Oleg Drokin --- libcfs/include/libcfs/libcfs.h | 10 +++++----- libcfs/include/libcfs/libcfs_debug.h | 5 +++-- libcfs/include/libcfs/libcfs_ioctl.h | 6 +++--- libcfs/include/libcfs/linux/libcfs.h | 7 ++++--- libcfs/libcfs/linux/linux-module.c | 6 +++--- libcfs/libcfs/linux/linux-proc.c | 17 +++++++++-------- libcfs/libcfs/module.c | 4 ++-- libcfs/libcfs/tracefile.c | 13 ++++++------- libcfs/libcfs/tracefile.h | 10 +++++----- 9 files changed, 40 insertions(+), 38 deletions(-) diff --git a/libcfs/include/libcfs/libcfs.h b/libcfs/include/libcfs/libcfs.h index 76117da..3843ac7 100644 --- a/libcfs/include/libcfs/libcfs.h +++ b/libcfs/include/libcfs/libcfs.h @@ -188,11 +188,11 @@ struct cfs_psdev_file { }; struct cfs_psdev_ops { - int (*p_open)(unsigned long, void *); - int (*p_close)(unsigned long, void *); - int (*p_read)(struct cfs_psdev_file *, char *, unsigned long); - int (*p_write)(struct cfs_psdev_file *, char *, unsigned long); - int (*p_ioctl)(struct cfs_psdev_file *, unsigned long, void *); + int (*p_open)(unsigned long, void *); + int (*p_close)(unsigned long, void *); + int (*p_read)(struct cfs_psdev_file *, char *, unsigned long); + int (*p_write)(struct cfs_psdev_file *, char *, unsigned long); + int (*p_ioctl)(struct cfs_psdev_file *, unsigned long, void __user *); }; /* diff --git a/libcfs/include/libcfs/libcfs_debug.h b/libcfs/include/libcfs/libcfs_debug.h index 745236e..bf83c89 100644 --- a/libcfs/include/libcfs/libcfs_debug.h +++ b/libcfs/include/libcfs/libcfs_debug.h @@ -376,8 +376,9 @@ extern int libcfs_debug_vmsg2(struct libcfs_debug_msg_data *msgdata, /* other external symbols that tracefile provides: */ extern int cfs_trace_copyin_string(char *knl_buffer, int knl_buffer_nob, - const char *usr_buffer, int usr_buffer_nob); -extern int cfs_trace_copyout_string(char *usr_buffer, int usr_buffer_nob, + const char __user *usr_buffer, + int usr_buffer_nob); +extern int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob, const char *knl_buffer, char *append); #define LIBCFS_DEBUG_FILE_PATH_DEFAULT "/tmp/lustre-log" diff --git a/libcfs/include/libcfs/libcfs_ioctl.h b/libcfs/include/libcfs/libcfs_ioctl.h index 3fb0539..b185a96 100644 --- a/libcfs/include/libcfs/libcfs_ioctl.h +++ b/libcfs/include/libcfs/libcfs_ioctl.h @@ -66,9 +66,9 @@ struct libcfs_ioctl_data { char *ioc_inlbuf2; __u32 ioc_plen1; /* buffers in userspace */ - char *ioc_pbuf1; + char __user *ioc_pbuf1; __u32 ioc_plen2; /* buffers in userspace */ - char *ioc_pbuf2; + char __user *ioc_pbuf2; char ioc_bulk[0]; }; @@ -255,7 +255,7 @@ extern int libcfs_ioctl_getdata(struct libcfs_ioctl_hdr *buf, __u32 buf_len, const void __user *arg); extern int libcfs_ioctl_getdata_len(const struct libcfs_ioctl_hdr __user *arg, __u32 *buf_len); -extern int libcfs_ioctl_popdata(void *arg, void *buf, int size); +extern int libcfs_ioctl_popdata(void __user *arg, void *buf, int size); #endif extern int libcfs_ioctl_data_adjust(struct libcfs_ioctl_data *data); diff --git a/libcfs/include/libcfs/linux/libcfs.h b/libcfs/include/libcfs/linux/libcfs.h index 7f3ba3e..b5ce289 100644 --- a/libcfs/include/libcfs/linux/libcfs.h +++ b/libcfs/include/libcfs/linux/libcfs.h @@ -112,9 +112,10 @@ do { \ #define CFS_CURPROC_COMM_MAX (sizeof ((struct task_struct *)0)->comm) /* helper for sysctl handlers */ -int lprocfs_call_handler(void *data, int write, loff_t *ppos, void *buffer, - size_t *lenp, int (*handler)(void *data, int write, - loff_t pos, void *buffer, int len)); +int lprocfs_call_handler(void *data, int write, loff_t *ppos, + void __user *buffer, size_t *lenp, + int (*handler)(void *data, int write, + loff_t pos, void __user *buffer, int len)); #include diff --git a/libcfs/libcfs/linux/linux-module.c b/libcfs/libcfs/linux/linux-module.c index 6d841b4..6307129 100644 --- a/libcfs/libcfs/linux/linux-module.c +++ b/libcfs/libcfs/linux/linux-module.c @@ -89,9 +89,9 @@ int libcfs_ioctl_getdata(struct libcfs_ioctl_hdr *buf, __u32 buf_len, RETURN(0); } -int libcfs_ioctl_popdata(void *arg, void *data, int size) +int libcfs_ioctl_popdata(void __user *arg, void *data, int size) { - if (copy_to_user((char *)arg, data, size)) + if (copy_to_user(arg, data, size)) return -EFAULT; return 0; } @@ -164,7 +164,7 @@ static long libcfs_ioctl(struct file *file, pfile.off = 0; pfile.private_data = file->private_data; if (libcfs_psdev_ops.p_ioctl != NULL) - rc = libcfs_psdev_ops.p_ioctl(&pfile, cmd, (void *)arg); + rc = libcfs_psdev_ops.p_ioctl(&pfile, cmd, (void __user *)arg); else rc = -EPERM; return (rc); diff --git a/libcfs/libcfs/linux/linux-proc.c b/libcfs/libcfs/linux/linux-proc.c index d5a979b..bb9dc04 100644 --- a/libcfs/libcfs/linux/linux-proc.c +++ b/libcfs/libcfs/linux/linux-proc.c @@ -76,9 +76,10 @@ extern char lnet_upcall[1024]; */ extern char lnet_debug_log_upcall[1024]; -int lprocfs_call_handler(void *data, int write, loff_t *ppos, void *buffer, - size_t *lenp, int (*handler)(void *data, int write, - loff_t pos, void *buffer, int len)) +int lprocfs_call_handler(void *data, int write, loff_t *ppos, + void __user *buffer, size_t *lenp, + int (*handler)(void *data, int write, loff_t pos, + void __user *buffer, int len)) { int rc = handler(data, write, *ppos, buffer, *lenp); @@ -96,7 +97,7 @@ int lprocfs_call_handler(void *data, int write, loff_t *ppos, void *buffer, EXPORT_SYMBOL(lprocfs_call_handler); static int __proc_dobitmasks(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { const int tmpstrlen = 512; char *tmpstr; @@ -148,7 +149,7 @@ static int min_watchdog_ratelimit = 0; /* disable ratelimiting */ static int max_watchdog_ratelimit = (24*60*60); /* limit to once per day */ static int __proc_dump_kernel(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { if (!write) return 0; @@ -165,7 +166,7 @@ proc_dump_kernel(struct ctl_table *table, int write, void __user *buffer, } static int __proc_daemon_file(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { if (!write) { int len = strlen(cfs_tracefile); @@ -189,7 +190,7 @@ proc_daemon_file(struct ctl_table *table, int write, void __user *buffer, } static int __proc_debug_mb(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { if (!write) { char tmpstr[32]; @@ -332,7 +333,7 @@ proc_fail_loc(struct ctl_table *table, int write, void __user *buffer, } static int __proc_cpt_table(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { char *buf = NULL; int len = 4096; diff --git a/libcfs/libcfs/module.c b/libcfs/libcfs/module.c index 7621023..ee678ec 100644 --- a/libcfs/libcfs/module.c +++ b/libcfs/libcfs/module.c @@ -223,7 +223,7 @@ int libcfs_deregister_ioctl(struct libcfs_ioctl_handler *hand) EXPORT_SYMBOL(libcfs_deregister_ioctl); static int libcfs_ioctl_handle(struct cfs_psdev_file *pfile, unsigned long cmd, - void *arg, struct libcfs_ioctl_hdr *hdr) + void __user *arg, struct libcfs_ioctl_hdr *hdr) { struct libcfs_ioctl_data *data = NULL; int err; @@ -310,7 +310,7 @@ static int libcfs_ioctl_handle(struct cfs_psdev_file *pfile, unsigned long cmd, } static int libcfs_ioctl(struct cfs_psdev_file *pfile, - unsigned long cmd, void *arg) + unsigned long cmd, void __user *arg) { struct libcfs_ioctl_hdr *hdr; int err = 0; diff --git a/libcfs/libcfs/tracefile.c b/libcfs/libcfs/tracefile.c index 0c2e06a..d0b031e 100644 --- a/libcfs/libcfs/tracefile.c +++ b/libcfs/libcfs/tracefile.c @@ -741,15 +741,14 @@ void cfs_trace_flush_pages(void) } int cfs_trace_copyin_string(char *knl_buffer, int knl_buffer_nob, - const char *usr_buffer, int usr_buffer_nob) + const char __user *usr_buffer, int usr_buffer_nob) { int nob; if (usr_buffer_nob > knl_buffer_nob) return -EOVERFLOW; - if (copy_from_user((void *)knl_buffer, - (void *)usr_buffer, usr_buffer_nob)) + if (copy_from_user(knl_buffer, usr_buffer, usr_buffer_nob)) return -EFAULT; nob = strnlen(knl_buffer, usr_buffer_nob); @@ -768,7 +767,7 @@ int cfs_trace_copyin_string(char *knl_buffer, int knl_buffer_nob, } EXPORT_SYMBOL(cfs_trace_copyin_string); -int cfs_trace_copyout_string(char *usr_buffer, int usr_buffer_nob, +int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob, const char *knl_buffer, char *append) { /* NB if 'append' != NULL, it's a single character to append to the @@ -810,7 +809,7 @@ void cfs_trace_free_string_buffer(char *str, int nob) kfree(str); } -int cfs_trace_dump_debug_buffer_usrstr(void *usr_str, int usr_str_nob) +int cfs_trace_dump_debug_buffer_usrstr(void __user *usr_str, int usr_str_nob) { char *str; int rc; @@ -872,7 +871,7 @@ int cfs_trace_daemon_command(char *str) return rc; } -int cfs_trace_daemon_command_usrstr(void *usr_str, int usr_str_nob) +int cfs_trace_daemon_command_usrstr(void __user *usr_str, int usr_str_nob) { char *str; int rc; @@ -925,7 +924,7 @@ int cfs_trace_set_debug_mb(int mb) return 0; } -int cfs_trace_set_debug_mb_usrstr(void *usr_str, int usr_str_nob) +int cfs_trace_set_debug_mb_usrstr(void __user *usr_str, int usr_str_nob) { char str[32]; int rc; diff --git a/libcfs/libcfs/tracefile.h b/libcfs/libcfs/tracefile.h index ca7f904..6eed697 100644 --- a/libcfs/libcfs/tracefile.h +++ b/libcfs/libcfs/tracefile.h @@ -71,16 +71,16 @@ void cfs_tracefile_exit(void); int cfs_trace_copyin_string(char *knl_buffer, int knl_buffer_nob, - const char *usr_buffer, int usr_buffer_nob); -int cfs_trace_copyout_string(char *usr_buffer, int usr_buffer_nob, + const char __user *usr_buffer, int usr_buffer_nob); +int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob, const char *knl_str, char *append); int cfs_trace_allocate_string_buffer(char **str, int nob); void cfs_trace_free_string_buffer(char *str, int nob); -int cfs_trace_dump_debug_buffer_usrstr(void *usr_str, int usr_str_nob); +int cfs_trace_dump_debug_buffer_usrstr(void __user *usr_str, int usr_str_nob); int cfs_trace_daemon_command(char *str); -int cfs_trace_daemon_command_usrstr(void *usr_str, int usr_str_nob); +int cfs_trace_daemon_command_usrstr(void __user *usr_str, int usr_str_nob); int cfs_trace_set_debug_mb(int mb); -int cfs_trace_set_debug_mb_usrstr(void *usr_str, int usr_str_nob); +int cfs_trace_set_debug_mb_usrstr(void __user *usr_str, int usr_str_nob); int cfs_trace_get_debug_mb(void); extern void libcfs_debug_dumplog_internal(void *arg); -- 1.8.3.1