there is no documented spec afaik when it comes to the sysctl() syscall function other than like the source ... but the current code and LTP stuff does not recognize EACCES as a valid return value
kernel/sysctl.c:parse_table()
if (!gr_handle_sysctl(table, oldval, newval))
return -EACCES;
perhaps that should be:
return -EPERM