Поддержка Go в ejudge

Обсуждение вопросов, связанных с системой проведения турниров ejudge.
Post Reply
apathism
Posts:64
Joined:09 January 2009, 22:54
Location:Мытищи, Россия
Поддержка Go в ejudge

Post by apathism » 24 March 2017, 01:09

Доброго времени суток.

У меня за долгое время успешного использования ejudge в разных олимпиадах и сервисах накопилось два вопроса.
И оба из них связаны с поддержкой разных языков программирования в патче к ядру.

Первый — более технический и конкретный. Недавно один из участников попросил меня добавить на сервер поддержку языка Go.
Я попробовал воспользоваться как стандартным языковым скриптом для gccgo, так и google-версией. И в обоих случаях получал Run-Time даже на пустой программе. Результат strace везде был одинаковый.

Image

Обе реализации Go пытались вызвать sigaltstack, получали от ядра EPERM, и крашились.
Есть ли какая-либо панацея от этого? Существует ли у кого-нибудь история успеха с поддержкой Go в безопасном режиме?

Второй вопрос — более общий. Насколько я понимаю, не существует никакого способа безопасного запуска .Net-программ в ejudge.

Однако я регулярно обращал внимание, что на большинстве соревнований, где используется ejudge, включена поддержка C#/Pascal ABC.Net, и других ЯП на основе .Net. Как организаторы соревнований выходят из ситуации, когда пользовательская программа способна нарушить работу тестирующего сервера на продолжительное время?

Спасибо за ответы.

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Поддержка Go в ejudge

Post by cher » 26 March 2017, 10:45

Нужно смотреть, какие системные вызовы используются в go. Запустить в обычном режиме под strace. Какой-нибудь sigaltstack можно и разрешить в безопасном режиме, вреда от него особого нет.

Для небезопасных языков можно (и нужно) использовать запуск под отдельным пользователем. В принципе, при запуске под отдельным пользователем можно настраивать разные cgroup и совсем изолировать процесс как в docker, но с этим нужно разбираться.

Post Reply