Drop 'linux/user_namespace.h' wrapper
[lttng-modules.git] / include / lttng / tracepoint-event-impl.h
index e3a858a397c5d49a8dfde63e97f5d61cf8e9b764..88a2bccccb21b4f6fab9d06a86184503a3fe1b5d 100644 (file)
 #include <linux/rculist.h>
 #include <asm/byteorder.h>
 #include <linux/swab.h>
+#include <linux/user_namespace.h>
 
 #include <wrapper/vmalloc.h>   /* for wrapper_vmalloc_sync_mappings() */
 #include <ringbuffer/frontend_types.h>
 #include <ringbuffer/backend.h>
 #include <wrapper/rcu.h>
-#include <wrapper/user_namespace.h>
 #include <lttng/types.h>
 #include <lttng/probe-user.h>
 #include <lttng/events.h>
@@ -259,27 +259,27 @@ static __used struct lttng_kernel_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM
 #undef _ctf_integer_ext
 #define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _user, _nowrite)      \
        lttng_kernel_static_event_field(#_item,                                         \
-               lttng_kernel_static_type_integer_from_type(_type, _byte_order, _base),  \
-               _nowrite, _user, 0),
+               _lttng_kernel_static_type_integer_from_type(_type, _byte_order, _user, _base),  \
+               _nowrite, 0),
 
 #undef _ctf_array_encoded
 #define _ctf_array_encoded(_type, _item, _src, _length,                \
                _encoding, _byte_order, _elem_type_base, _user, _nowrite) \
        lttng_kernel_static_event_field(#_item,                 \
                lttng_kernel_static_type_array(_length,         \
-                       lttng_kernel_static_type_integer_from_type(_type, _byte_order, _elem_type_base), \
+                       _lttng_kernel_static_type_integer_from_type(_type, _byte_order, _user, _elem_type_base), \
                        0,                                      \
                        _encoding),                             \
-               _nowrite, _user, 0),
+               _nowrite, 0),
 
 #undef _ctf_array_bitfield
 #define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \
        lttng_kernel_static_event_field(#_item,                 \
                lttng_kernel_static_type_array((_length) * sizeof(_type) * CHAR_BIT, \
-                       lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), \
+                       _lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, _user, 10), \
                        lttng_alignof(_type),                   \
                        none),                                  \
-               _nowrite, _user, 0),
+               _nowrite, 0),
 
 #undef _ctf_sequence_encoded
 #define _ctf_sequence_encoded(_type, _item, _src,              \
@@ -287,13 +287,13 @@ static __used struct lttng_kernel_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM
                        _byte_order, _elem_type_base, _user, _nowrite) \
        lttng_kernel_static_event_field("_" #_item "_length",   \
                lttng_kernel_static_type_integer_from_type(_length_type, __BYTE_ORDER, 10), \
-               _nowrite, 0, 1),                                \
+               _nowrite, 1),                                   \
        lttng_kernel_static_event_field(#_item,                 \
                lttng_kernel_static_type_sequence(NULL, /* Use previous field. */ \
-                       lttng_kernel_static_type_integer_from_type(_type, _byte_order, _elem_type_base), \
+                       _lttng_kernel_static_type_integer_from_type(_type, _byte_order, _user, _elem_type_base), \
                        0,                                      \
                        _encoding),                             \
-               _nowrite, _user, 0),
+               _nowrite, 0),
 
 #undef _ctf_sequence_bitfield
 #define _ctf_sequence_bitfield(_type, _item, _src,             \
@@ -301,19 +301,19 @@ static __used struct lttng_kernel_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM
                        _user, _nowrite)                        \
        lttng_kernel_static_event_field("_" #_item "_length",   \
                lttng_kernel_static_type_integer_from_type(_length_type, __BYTE_ORDER, 10), \
-               _nowrite, 0, 1),                                \
+               _nowrite, 1),                                   \
        lttng_kernel_static_event_field(#_item,                 \
                lttng_kernel_static_type_sequence(NULL, /* Use previous field. */ \
-                       lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), \
+                       _lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, _user, 10), \
                        lttng_alignof(_type),                   \
                        none),                                  \
-               _nowrite, _user, 0),
+               _nowrite, 0),
 
 #undef _ctf_string
 #define _ctf_string(_item, _src, _user, _nowrite)              \
        lttng_kernel_static_event_field(#_item,                 \
-               lttng_kernel_static_type_string(UTF8),          \
-               _nowrite, _user, 0),
+               lttng_kernel_static_type_string(UTF8, _user),   \
+               _nowrite, 0),
 
 #undef _ctf_unused
 #define _ctf_unused(_src)
@@ -322,12 +322,12 @@ static __used struct lttng_kernel_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM
 #define _ctf_enum(_name, _type, _item, _src, _user, _nowrite)  \
        lttng_kernel_static_event_field(#_item,                 \
                lttng_kernel_static_type_enum(&__enum_##_name,  \
-                       lttng_kernel_static_type_integer_from_type(_type, __BYTE_ORDER, 10)), \
-               _nowrite, _user, 0),
+                       _lttng_kernel_static_type_integer_from_type(_type, __BYTE_ORDER, _user, 10)), \
+               _nowrite, 0),
 
 #undef ctf_custom_field
 #define ctf_custom_field(_type, _item, _code)                  \
-       lttng_kernel_static_event_field(#_item, PARAMS(_type), 0, 0, 1),
+       lttng_kernel_static_event_field(#_item, PARAMS(_type), 0, 1),
 
 #undef ctf_custom_type
 #define ctf_custom_type(...)   __VA_ARGS__
@@ -839,10 +839,18 @@ static inline size_t __event_get_align__##_name(void *__tp_locvar)              \
 
 #undef _ctf_array_encoded
 #define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \
-       if (_user) {                                                    \
-               __chan->ops->event_write_from_user(&__ctx, _src, sizeof(_type) * (_length), lttng_alignof(_type)); \
-       } else {                                                        \
-               __chan->ops->event_write(&__ctx, _src, sizeof(_type) * (_length), lttng_alignof(_type)); \
+       if (lttng_kernel_string_encoding_##_encoding == lttng_kernel_string_encoding_none) { \
+               if (_user) {                                                            \
+                       __chan->ops->event_write_from_user(&__ctx, _src, sizeof(_type) * (_length), lttng_alignof(_type)); \
+               } else {                                                                \
+                       __chan->ops->event_write(&__ctx, _src, sizeof(_type) * (_length), lttng_alignof(_type)); \
+               }                                                                       \
+       } else {                                                                        \
+               if (_user) {                                                            \
+                       __chan->ops->event_pstrcpy_pad_from_user(&__ctx, (const char __user *) (_src), _length); \
+               } else {                                                                \
+                       __chan->ops->event_pstrcpy_pad(&__ctx, (const char *) (_src), _length); \
+               }                                                                       \
        }
 
 #if (__BYTE_ORDER == __LITTLE_ENDIAN)
@@ -893,18 +901,28 @@ static inline size_t __event_get_align__##_name(void *__tp_locvar)              \
 #endif /* #else #if (__BYTE_ORDER == __LITTLE_ENDIAN) */
 
 #undef _ctf_sequence_encoded
-#define _ctf_sequence_encoded(_type, _item, _src, _length_type,                \
+#define _ctf_sequence_encoded(_type, _item, _src, _length_type,                        \
                        _src_length, _encoding, _byte_order, _base, _user, _nowrite) \
-       {                                                               \
+       {                                                                       \
                _length_type __tmpl = this_cpu_ptr(&lttng_dynamic_len_stack)->stack[__dynamic_len_idx]; \
                __chan->ops->event_write(&__ctx, &__tmpl, sizeof(_length_type), lttng_alignof(_length_type));\
-       }                                                               \
-       if (_user) {                                                    \
-               __chan->ops->event_write_from_user(&__ctx, _src,        \
-                       sizeof(_type) * __get_dynamic_len(dest), lttng_alignof(_type)); \
-       } else {                                                        \
-               __chan->ops->event_write(&__ctx, _src,                  \
-                       sizeof(_type) * __get_dynamic_len(dest), lttng_alignof(_type)); \
+       }                                                                       \
+       if (lttng_kernel_string_encoding_##_encoding == lttng_kernel_string_encoding_none) { \
+               if (_user) {                                                    \
+                       __chan->ops->event_write_from_user(&__ctx, _src,        \
+                               sizeof(_type) * __get_dynamic_len(dest), lttng_alignof(_type)); \
+               } else {                                                        \
+                       __chan->ops->event_write(&__ctx, _src,                  \
+                               sizeof(_type) * __get_dynamic_len(dest), lttng_alignof(_type)); \
+               }                                                               \
+       } else {                                                                \
+               if (_user) {                                                    \
+                       __chan->ops->event_pstrcpy_pad_from_user(&__ctx, (const char __user *) (_src), \
+                               __get_dynamic_len(dest));                       \
+               } else {                                                        \
+                       __chan->ops->event_pstrcpy_pad(&__ctx, (const char *) (_src), \
+                               __get_dynamic_len(dest));                       \
+               }                                                               \
        }
 
 #if (__BYTE_ORDER == __LITTLE_ENDIAN)
@@ -1084,19 +1102,19 @@ static void __event_probe__##_name(_data_proto)                                         \
                        return;                                                         \
                __lf = lttng_rcu_dereference(__session->uid_tracker.p);                 \
                if (__lf && likely(!lttng_id_tracker_lookup(__lf,                       \
-                               lttng_current_uid())))                                  \
+                               from_kuid_munged(&init_user_ns, current_uid()))))       \
                        return;                                                         \
                __lf = lttng_rcu_dereference(__session->vuid_tracker.p);                \
                if (__lf && likely(!lttng_id_tracker_lookup(__lf,                       \
-                               lttng_current_vuid())))                                 \
+                               from_kuid_munged(current_user_ns(), current_uid()))))   \
                        return;                                                         \
                __lf = lttng_rcu_dereference(__session->gid_tracker.p);                 \
                if (__lf && likely(!lttng_id_tracker_lookup(__lf,                       \
-                               lttng_current_gid())))                                  \
+                               from_kgid_munged(&init_user_ns, current_gid()))))       \
                        return;                                                         \
                __lf = lttng_rcu_dereference(__session->vgid_tracker.p);                \
                if (__lf && likely(!lttng_id_tracker_lookup(__lf,                       \
-                               lttng_current_vgid())))                                 \
+                               from_kgid_munged(current_user_ns(), current_gid()))))   \
                        return;                                                         \
                break;                                                                  \
        }                                                                               \
@@ -1237,7 +1255,7 @@ static const struct lttng_kernel_event_desc __event_desc___##_map = {     \
 #define TP_ID1(_token, _system)        _token##_system
 #define TP_ID(_token, _system) TP_ID1(_token, _system)
 
-static const struct lttng_kernel_event_desc * const TP_ID(__event_desc___, TRACE_SYSTEM)[] = {
+static const struct lttng_kernel_event_desc * const TP_ID(__provider_event_desc___, TRACE_SYSTEM)[] = {
 #include TRACE_INCLUDE(TRACE_INCLUDE_FILE)
 };
 
@@ -1256,8 +1274,8 @@ static const struct lttng_kernel_event_desc * const TP_ID(__event_desc___, TRACE
 /* non-const because list head will be modified when registered. */
 static __used struct lttng_kernel_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM) = {
        .provider_name = __stringify(TRACE_SYSTEM),
-       .event_desc = TP_ID(__event_desc___, TRACE_SYSTEM),
-       .nr_events = ARRAY_SIZE(TP_ID(__event_desc___, TRACE_SYSTEM)),
+       .event_desc = TP_ID(__provider_event_desc___, TRACE_SYSTEM),
+       .nr_events = ARRAY_SIZE(TP_ID(__provider_event_desc___, TRACE_SYSTEM)),
        .head = { NULL, NULL },
        .lazy_init_head = { NULL, NULL },
        .lazy = 0,
This page took 0.034957 seconds and 4 git commands to generate.