Re: [RFC PATCH] bpf: Add helpers to read useful task_struct members

From: Naveen N. Rao
Date: Tue Nov 07 2017 - 03:37:50 EST


Alexei Starovoitov wrote:
On 11/7/17 12:55 AM, Naveen N. Rao wrote:
I thought such struct shouldn't change layout.
If it is we need to fix include/linux/compiler-clang.h to do that
anon struct as well.

We considered that, but it looked to be very dependent on the version of
gcc used to build the kernel. But, this may be a simpler approach for
the shorter term.


why it would depend on version of gcc?

From what I can see, randomized_struct_fields_start is defined only for
gcc >= 4.6. For older versions, it does not get mapped to an anonymous structure. We may not care for older gcc versions, but..

The other issue was that __randomize_layout maps to __designated_init when randstruct plugin is not enabled, which is in turn an attribute on gcc >= v5.1, but not otherwise.

We just need this, no?

diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h
index de179993e039..4e29ab6187cb 100644
--- a/include/linux/compiler-clang.h
+++ b/include/linux/compiler-clang.h
@@ -15,3 +15,6 @@
* with any version that can compile the kernel
*/
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
+
+#define randomized_struct_fields_start struct {
+#define randomized_struct_fields_end };

since offsets are mandated by C standard.

Yes, this is what we're testing with and is probably sufficient for our purposes.

- Naveen