Добро пожаловать в stackoverflow! IIRC, который вы хотите sys_chmod()
Из списка рассылки ядра Linux
В четверг, 20 февраля 2003 г. в 23:10:27 +0100, Андреа Арканджели написала:
В четверг, 20 февраля 2003 г., 12:40:43 - 05:00 Джефф Гарзик написал:
В четверг, 20 февраля 2003 г., в 11:04:37 +0530, Прасад написал:
Есть ли способ, с помощью которого я мог бы вызвать системный вызов в ядре
пространство? Системный вызов должен быть замаскирован под другой процесс. Фактический
Вызовите sys_whwhat (). Посмотрите на код ядра для примеров.
Ядро уже делает это в
различные места. sys_read, sys_write,
open_filp, sys_close и другие
функции безопасны для вызова из ядра
код - хотя это не рекомендуется.
init / do_mounts.c является особенно
досадный случай, и это большая причина, почему
klibc нужно объединить. Системные вызовы
должно быть сделано из пространства пользователя, а не из
ядро.
Люди начинают беспокоиться, поскольку это не то, что вы можете делать в ядре (если вы не используете, вы знаете, что делаете). Если вы просто хотите изменить разрешения для определенного события, сделайте это из пространства пользователя с помощью inotify или аналогичного.
Отказ от ответственности в сторону:
Вот код, который я нашел в другом модуле ядра, который использует вызовы sys_ *:
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/types.h>
#include <linux/fcntl.h>
#include <linux/delay.h>
#include <linux/string.h>
#include <linux/syscalls.h>
/* Snip */
int openflags = O_WRONLY|O_CREAT;
if (ml != 1)
openflags |= O_TRUNC;
wfd = sys_open(collected, openflags, mode);
if (wfd >= 0) {
sys_fchown(wfd, uid, gid);
sys_fchmod(wfd, mode);
state = CopyFile;
}
Также найдено:
asmlinkage long sys_rename(const char __user *oldname, const char __user *newname);
asmlinkage long sys_chmod(const char __user *filename, mode_t mode);
asmlinkage long sys_fchmod(unsigned int fd, mode_t mode);
в include/linux/syscalls.h
Имейте в виду, прошло много времени с тех пор, как я занимался ядром. Проверьте , что это подходящий интерфейс для chmod, и что вы не используете ярлыки для других вызовов, которые могут реализовывать хуки безопасности, например.
Также Эта ссылка содержит информацию о системных вызовах и их символах. Также Здесь - краткий справочник системных вызовов API пользовательского пространства и того, где они реализованы в ядре.