Bug 30206

Summary: hasher-priv: chrootuid: unshare CLONE_NEWNET: File exists
Product: Sisyphus Reporter: Vitaly Lipatov <lav>
Component: hasher-privAssignee: Dmitry V. Levin <ldv>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: evg, ldv, placeholder
Version: unstable   
Hardware: all   
OS: Linux   

Description Vitaly Lipatov 2014-07-22 23:24:48 MSK
При сборке в контейнере OpenVZ у нас стала появляться следующая ошибка:
hasher-priv: chrootuid: unshare CLONE_NEWNET: File exists

О такой же ошибке писали ещё три года назад:
http://lists.altlinux.org/pipermail/devel/2011-June/191197.html

Фатальность вызвана кодом в
static int
test_unshare(int clone_flags, int share_flag)
{
...
        if (errno == ENOSYS || errno == EINVAL || errno == EPERM)
                return share_flag ? 0 : -1;
        return -1;
}

который не поддерживает код возврата
unshare(CLONE_NEWNET)                   = -1 EEXIST (File exists)

В принципе, для OpenVZ можно выключить
CAPABILITY="SYS_ADMIN:on"
и File exists появляться не будет...

Ещё странно, что при проверке через
$ unshare -n CLONE_NEWNET sh
EEXIST возвращается только под рутом.
Comment 1 Dmitry V. Levin 2014-07-22 23:38:16 MSK
(In reply to comment #0)
> При сборке в контейнере OpenVZ у нас стала появляться следующая ошибка:
> hasher-priv: chrootuid: unshare CLONE_NEWNET: File exists

Ошибка проявляется сразу, или спустя некоторое время после загрузки ядра?
Comment 2 Vitaly Lipatov 2014-07-23 22:40:20 MSK
(В ответ на комментарий №1)
> (In reply to comment #0)
> > При сборке в контейнере OpenVZ у нас стала появляться следующая ошибка:
> > hasher-priv: chrootuid: unshare CLONE_NEWNET: File exists
> 
> Ошибка проявляется сразу, или спустя некоторое время после загрузки ядра?

Я проверял так:
установил последнее ядро (2.6.32-ovz-el-alt122),
перезагрузился, зашёл в контейнер и получил ошибку командой
# unshare -n CLONE_NEWNET sh
Comment 3 Dmitry V. Levin 2014-07-23 23:05:09 MSK
(In reply to comment #2)
> Я проверял так:
> установил последнее ядро (2.6.32-ovz-el-alt122),
> перезагрузился, зашёл в контейнер и получил ошибку командой
> # unshare -n CLONE_NEWNET sh

У меня на этом ядре
# unshare -n CLONE_NEWNET /bin/true
unshare: unshare failed: Operation not permitted
Comment 4 Vitaly Lipatov 2014-07-23 23:18:59 MSK
(В ответ на комментарий №3)
...
> У меня на этом ядре
> # unshare -n CLONE_NEWNET /bin/true
> unshare: unshare failed: Operation not permitted

В OpenVZ-контейнере, запущенном с 
CAPABILITY="SYS_ADMIN:on"
?

Я не представляю, что сломалось. В /etc хост-машины ничего не менялось.
Comment 5 Dmitry V. Levin 2014-07-23 23:38:26 MSK
(In reply to comment #4)
> (В ответ на комментарий №3)
> ...
> > У меня на этом ядре
> > # unshare -n CLONE_NEWNET /bin/true
> > unshare: unshare failed: Operation not permitted
> 
> В OpenVZ-контейнере, запущенном с 
> CAPABILITY="SYS_ADMIN:on"
> ?

Нет, со стандратным набором capabilities.