On Fri, 2020-05-22 at 19:29 +0200, Eugene Syromiatnikov wrote:
On Fri, May 22, 2020 at 10:17:43AM -0700, Yu-cheng Yu wrote:
quoted
On Thu, 2020-05-21 at 15:42 -0700, Kees Cook wrote:
quoted
On Wed, Apr 29, 2020 at 03:07:32PM -0700, Yu-cheng Yu wrote:
[...]
quoted
quoted
+
+int prctl_cet(int option, u64 arg2)
+{
+ struct cet_status *cet;
+
+ if (!IS_ENABLED(CONFIG_X86_INTEL_CET))
+ return -EINVAL;
Using -EINVAL here means userspace can't tell the difference between an
old kernel and a kernel not built with CONFIG_X86_INTEL_CET. Perhaps
-ENOTSUPP?
Looked into this. The kernel and GLIBC are not in sync. So maybe we still use
EINVAL here?
Yu-cheng
In kernel:
----------
#define EOPNOTSUPP 95
#define ENOTSUPP 524
In GLIBC:
---------
printf("ENOTSUP=%d\n", ENOTSUP);
printf("EOPNOTSUPP=%d\n", EOPNOTSUPP);
printf("%s=524\n", strerror(524));
ENOTSUP=95
EOPNOTSUPP=95
Unknown error 524=524
EOPNOTSUPP/ENOTSUP/ENOTSUPP is actually a mess, it's summarized recently
by Michael Kerrisk[1]. From the kernel's point of view, I think it
would be reasonable to return EOPNOTSUPP, and expect that the userspace
would use ENOTSUP to match against it.
Ok, use EOPNOTSUPP and add a comment why.
Yu-cheng