LINUX.ORG.RU
ФорумAdmin

VirtualBox - SYMLINKS_ARE_NOT_PERMITTED

 , ,


0

1

добрый день

проблема VirtualBox-a, известная как "SYMLINKS_ARE_NOT_PERMITTED"
проявилась в 4й и 5й версии VBox-a  (не опенсорсная, ставится *.run-файлом)

- vbox устанавливается "жестко" в каталог  /opt/VirtualBox
- подвержены 4я и 5ые версии (проверялось на 4.3.30, 5.0.6)
- если /opt или /opt/VirtualBox - являются линками на другие каталоги/партишны (причина)

ни какими манипуляциями запустить такой вариант не получилось
если сделать /opt/VirtualBox - нормальным каталогом (не ссылкой) то стартует нормально 

пробовал хак:
- распаковываем *.run, патчим  install.sh :
INSTALLATION_DIR=${INSTALLATION_DIR:-/opt/VirtualBox}
- из внешнего окружение переопределяем и стартуем установку
INSTALLATION_DIR=/usr/lib/VirtualBox ...
- установка, как ни странно, производится в нужный каталог, но при старте VBox-a все равно файлы и библиотеки берутся из "стандартного каталога" /opt/VirtualBox, т.е. так же не получилось запустить

все это не было бы проблемой, если бы каталог /opt  не был бы ссылкой на другой раздел (это "constat" - меняться не будет)

p.s.

ошибка дословно:
Failed to load R0 module /opt/VirtualBox/VMMR0.r0: Symlinks are not permitted: '/opt' (VERR_SUPLIB_SYMLINKS_ARE_NOT_PERMITTED).
Failed to load VMMR0.r0 (VERR_SUPLIB_SYMLINKS_ARE_NOT_PERMITTED)

http://i65.fastpic.ru/big/2015/1014/a0/88b59166624d155456203b29bb3df8a0.jpg

★★

Это не «проблема», а стандартное поведение, реализованное разработчиками, если для того есть рукописный код ошибки. Ты с этим ничего не сделаешь, иди общайся с разработчиками.

anonymous ()
Ответ на: комментарий от bormant

этот патч видел, но это для опенсорса, а не для проприо...

я же написал не опенсорсная, ставится *.run-файлом

или я не совсем понимаю?

sunjob ★★ ()
Ответ на: комментарий от bormant

чего найти в бинарнике?

по ссылке - дан патч, который накладыватеся на open source «дерево исходников» а потом собирается сам проект «vbox open source» (не совместимый с закрытой версией vbox-a)

sunjob ★★ ()
Ответ на: комментарий от sunjob

по ссылке - дан патч, который накладыватеся на open source «дерево исходников»

И что, это не поможет найти фрагмент проверки на симлинк в бинарнике?

Идем в исходники: https://www.virtualbox.org/browser/vbox/trunk/src/VBox/HostDrivers/Support/SU...

Видим там:

static int 
supR3HardenedVerifyFsObject(PCSUPR3HARDENEDFSOBJSTATE pFsObjState, bool fDir, bool fRelaxed,
                            const char *pszPath, PRTERRINFO pErrInfo)

...

if (S_ISLNK(pFsObjState->Stat.st_mode))
    return supR3HardenedSetError3(VERR_SUPLIB_SYMLINKS_ARE_NOT_PERMITTED, pErrInfo,
        "Symlinks are not permitted: '", pszPath, "'");

Смотрим в бинарник /VirtualBox, видим там:

.0804A966: 81E100F00000                   and          ecx,00000F000 ;'  Ё '
.0804A96C: 81F900400000                   cmp          ecx,000004000 ;'  @ '
.0804A972: 743D                           jz          .00804A9B1 --↓3
.0804A974: 81F900800000                   cmp          ecx,000008000 ;'  А '
.0804A97A: 7435                           jz          .00804A9B1 --↓3

; if (S_ISLNK(pFsObjState->Stat.st_mode))
.0804A97C: 81F900A00000                   cmp          ecx,00000A000 ;'  а '
.0804A982: 0F8488000000                   jz          .00804AA10 --↓4

Достатошно?

bormant ★★★★★ ()
Последнее исправление: bormant (всего исправлений: 1)
Ответ на: комментарий от bormant

не, не достатошно! му тут простые люди, поэтому и задаем вопросы... :о)

если вам не сложно, то можно продолжить тут, в топике, либо для менее понятливых в личку (что бы не засорять тему)?

т.е. до конца, что с этим щастем делать? (видимо дебажить/обратно инженерить/ - дык это жешь не для простого юзера, тогда надо либо подробно «всю операцию» описать, если вам не сложно, либо, забить на все это большой болт, за неимением времени/опыта и, в конце концов, не сошелся же свет клином на этой проге :о)

а так, надеюсь, если сделаете подробное описание действий, то, народу это в конце концов, пригодиться (ну я так думаю)

заранее благодарен, огромное спасибо

sunjob ★★ ()
Ответ на: комментарий от sunjob

если вам не сложно

ну как вам сказать... Не проделав, не понять ;)
Для 32-разрядной версии фраза «Symlinks are not permitted: '» присутствует в нескольких бинарниках (VBoxHeadless, VBoxNetDHCP, VBoxNetNAT, VBoxRT.so, VBoxSDL, VirtualBox). Для каждого из них нужно убедиться, что искомый фрагмент встречается только один раз (чтобы не запатчить лишнего), затем сделать замену, например, при помощи sed, проверить работоспособность.
Повторить для 64-разрядной версии, начав с самого начала, с поиска в бинарнике фрагмента проверки (там байтики будут другие).

В качестве быстрого и грязного решения могу предложить sed-ом заменить в указанных файлах байтики, забив nop-ами условный переход:

для 32-битного 5.0.6:
81 F9 00 A0 00 00 0F 84 88 00 00 00
81 F9 00 A0 00 00 90 90 90 90 90 90

для 64 битного 5.0.6:
81 FA 00 A0 00 00 74 7F
81 FA 00 A0 00 00 90 90

Можете поискать повыше вход в функцию и дописать в самом начале очистку eax и выход (31 С0 С3), будет точно как в патче на исходник.

PS. Смотрел только на файл VirtuaBox, если в остальных вдруг оптимизатор выкинул какие коленца, нужно отдельно разбираться, но лень... Описанного тут должно быть вполне достаточно для решения проблемы с симлинком.

bormant ★★★★★ ()
Ответ на: комментарий от bormant

PPS. Если кто будет искать аналогичный фрагмент в 64-битной версии, то там он скомпилирован примерно в это (5.0.6):

.00000000`00403075: 81E200F00000                   and          edx,00000F000 ;'  Ё '
.00000000`0040307B: 81FA00400000                   cmp          edx,000004000 ;'  @ '
.00000000`00403081: 742D                           jz          .0004030B0 --↓3
.00000000`00403083: 81FA00800000                   cmp          edx,000008000 ;'  А '
.00000000`00403089: 7425                           jz          .0004030B0 --↓3

; if (S_ISLNK(pFsObjState->Stat.st_mode))
.00000000`0040308B: 81FA00A00000                   cmp          edx,00000A000 ;'  а '
.00000000`00403091: 747F                           jz          .000403112 --↓4

bormant ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.