Drop support for kernels < 3.0 from jbd2 instrumentation
[lttng-modules.git] / probes / lttng-probe-user.c
index 94ecf2f1cffb339d53d9c1dc4d62f58a13dc9ece..4162a7e42d2d94942fa4d5927afff8f95660d807 100644 (file)
@@ -1,25 +1,13 @@
-/*
+/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1)
+ *
  * lttng-probe-user.c
  *
  * Copyright (C) 2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; only
- * version 2.1 of the License.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 #include <linux/uaccess.h>
-#include "lttng-probe-user.h"
+#include <linux/module.h>
+#include <probes/lttng-probe-user.h>
 
 /*
  * Calculate string length. Include final null terminating character if there is
 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;
-               long ret;
+               unsigned long ret;
 
+               if (unlikely(!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));
-               if (unlikely(ret == -EFAULT))
+               if (unlikely(ret > 0))
                        break;
                count++;
                if (unlikely(!v))
@@ -52,3 +48,4 @@ long lttng_strlen_user_inatomic(const char *addr)
        set_fs(old_fs);
        return count;
 }
+EXPORT_SYMBOL_GPL(lttng_strlen_user_inatomic);
This page took 0.026386 seconds and 4 git commands to generate.