История изменений
Исправление KivApple, (текущая версия) :
Сразу вопросы:
1) Вызываемая функция, вероятно, должна иметь доступ к каким-то данным процесса-библиотеки общим для всех приложений-клиентов. Но выполняется она в пространстве того, кто её вызвал. Как защититься от того, что процесс, который её вызвал попытается обратиться к памяти процесса-библиотеки напрямую? Даже без злого умысла это может случиться как минимум из-за какого-нибудь бага. А повреждение памяти процесса-библиотеки повалит другие процессы, так как эта память должна быть общей между всеми клиентами (иначе бы можно было бы сделать обычную библиотеку, а не процесс-библиотеку, если бы не было нужно разделяемое состояние).
2) Вызываемая функция выполняется в контексте процесса, который её вызвал. В вызываемой функции происходит сегфолт. Она валит вызвавший её процесс? А может ли она испортить вызвавшему процессу память?
Если забить на эти два вопроса, то без всяких изменений ядра можно просто компилировать все приложения в so (договориться об одной версии libc и товарищей, чтобы не было конфликтов) и грузить в один процесс (благо адресное пространство на 64 битах огромное). Но падать такой мега-процесс будет целиком, если что.
Исправление KivApple, :
Сразу вопросы:
1) Вызываемая функция, вероятно, должна иметь доступ к каким-то данным процесса-библиотеки общим для всех приложений-клиентов. Но выполняется она в пространстве того, кто её вызвал. Как защититься от того, что процесс, который её вызвал попытается обратиться к памяти процесса-библиотеки напрямую? Даже без злого умысла это может случиться как минимум из-за какого-нибудь бага. А повреждение памяти процесса-библиотеки повалит другие процессы, так как эта память должна быть общей между всеми клиентами (иначе бы можно было бы сделать обычную библиотеку, а не процесс-библиотеку, если бы не было нужно разделяемое состояние).
2) Вызываемая функция выполняется в контексте процесса, который её вызвал. В вызываемой функции происходит сегфолт. Она валит вызвавший её процесс? А может ли она испортить вызвавшему процессу память?
Если забить на эти два вопроса, то без всяких изменений ядра можно просто компилировать все приложения в so (договориться об одной версии libc и товарищей, чтобы не было конфликтов) и грузить в один процесс (благо адресное пространство на 64 битах огромное).
Исходная версия KivApple, :
Сразу вопросы:
1) Вызываемая функция, вероятно, должна иметь доступ к каким-то данным процесса-библиотеки общим для всех приложений-клиентов. Но выполняется она в пространстве того, кто её вызвал. Как защититься от того, что процесс, который её вызвал попытается обратиться к памяти процесса-библиотеки напрямую? Даже без злого умысла это может случиться как минимум из-за какого-нибудь бага. А повреждение памяти процесса-библиотеки повалит другие процессы, так как эта память должна быть общей между всеми клиентами (иначе бы можно было бы сделать обычную библиотеку, а не процесс-библиотеку, если бы не было нужно разделяемое состояние).
2) Вызываемая функция выполняется в контексте процесса, который её вызвал. В вызываемой функции происходит сегфолт. Она валит вызвавший её процесс? А может ли она испортить вызвавшему процессу память?