projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: sunrpc: null rpc_clnt dereference in rpc_task_queued tracepoint
[lttng-modules.git]
/
probes
/
lttng-probe-user.c
diff --git
a/probes/lttng-probe-user.c
b/probes/lttng-probe-user.c
index d0b5cf297367ce3c209b69ecb491e969ec321270..ed566ddb424b123a02f8ec1ba496517801a7eb2d 100644
(file)
--- a/
probes/lttng-probe-user.c
+++ b/
probes/lttng-probe-user.c
@@
-19,7
+19,9
@@
*/
#include <linux/uaccess.h>
*/
#include <linux/uaccess.h>
-#include "lttng-probe-user.h"
+#include <linux/module.h>
+#include <wrapper/uaccess.h>
+#include <probes/lttng-probe-user.h>
/*
* Calculate string length. Include final null terminating character if there is
/*
* Calculate string length. Include final null terminating character if there is
@@
-30,14
+32,22
@@
long lttng_strlen_user_inatomic(const char *addr)
{
long count = 0;
long lttng_strlen_user_inatomic(const char *addr)
{
long count = 0;
- mm_segment_t old_fs
= get_fs()
;
+ mm_segment_t old_fs;
+ if (!addr)
+ return 0;
+
+ old_fs = get_fs();
set_fs(KERNEL_DS);
pagefault_disable();
for (;;) {
char v;
unsigned long ret;
set_fs(KERNEL_DS);
pagefault_disable();
for (;;) {
char v;
unsigned long ret;
+ if (unlikely(!lttng_access_ok(VERIFY_READ,
+ (__force const char __user *) addr,
+ sizeof(v))))
+ break;
ret = __copy_from_user_inatomic(&v,
(__force const char __user *)(addr),
sizeof(v));
ret = __copy_from_user_inatomic(&v,
(__force const char __user *)(addr),
sizeof(v));
@@
-52,3
+62,4
@@
long lttng_strlen_user_inatomic(const char *addr)
set_fs(old_fs);
return count;
}
set_fs(old_fs);
return count;
}
+EXPORT_SYMBOL_GPL(lttng_strlen_user_inatomic);
This page took
0.024936 seconds
and
4
git commands to generate.