идея, вероятно, отсюда:
if (attr.freq) {
if (attr.sample_freq > sysctl_perf_event_sample_rate) // kernel.perf_event_max_sample_rate
return -EINVAL;
}но attr.freq в запросе этого эксплоита не выставлен, поэтому особого смысла нет.
А kernel.perf_event_paranoid=2 и впрямь недостаточно, т.к. основывается на этом коде:
if (!attr.exclude_kernel) {
if (perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN))
return -EACCES;
}
достаточно включить attr.exclude_kernel в исходном запросе, чтобы kernel.perf_event_paranoid=2 перестало спасать.