sethostname

「sethostname」の調査。
知りたいのは,「sethostname」の制限が/proc/sys/kernel/hostname
へのアクセス制御で実現できるか。

以下が,sethostnameのソース。

1513 asmlinkage long sys_sethostname(char __user *name, int len)
1514 {
1515         int errno;
1516         char tmp[__NEW_UTS_LEN];
1517 
1518         if (!capable(CAP_SYS_ADMIN))
1519                 return -EPERM;
1520         if (len < 0 || len > __NEW_UTS_LEN)
1521                 return -EINVAL;
1522         down_write(&uts_sem);
1523         errno = -EFAULT;
1524         if (!copy_from_user(tmp, name, len)) {
1525                 memcpy(system_utsname.nodename, tmp, len);
1526                 system_utsname.nodename[len] = 0;
1527                 errno = 0;
1528         }
1529         up_write(&uts_sem);
1530         return errno;
1531 }

capble(CAP_SYS_ADMIN)で,capability:sys_adminがチェックされてる。
で分からないのが,
sethostnameシステムコールを使って(sethostname("test",4))とすると,
なぜか/proc/sys/kernel/hostnameが書き換わる。
これがどこで起こってるのか?誰か教えてください…

ちょっとしたテストで確認。
auditallow domain sysctl_kernel_t:file write;
として,
sethostname("test",4)
を,実行すると,/proc/sys/kernel/hostname
が書き換わるしかし,/proc/sys/kernel/hostnameへのアクセスログは出ず。
一方
echo "test">/proc/sys/kernel/hostname
だと,ちゃんとログがでる。
●結論:
「sethostnameだけを制限することはできない」
昔のSELinuxでは出来たのになぁ。
LSM&カーネル本家へのマージの関係に違いない。