projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix: kvm instrumentation for CentOS >= 4.18.0-147
[lttng-modules.git]
/
probes
/
lttng-probe-user.c
diff --git
a/probes/lttng-probe-user.c
b/probes/lttng-probe-user.c
index 94ecf2f1cffb339d53d9c1dc4d62f58a13dc9ece..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,18
+32,26
@@
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;
set_fs(KERNEL_DS);
pagefault_disable();
for (;;) {
char v;
- long ret;
+
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));
- if (unlikely(ret
== -EFAULT
))
+ if (unlikely(ret
> 0
))
break;
count++;
if (unlikely(!v))
break;
count++;
if (unlikely(!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.023289 seconds
and
4
git commands to generate.