Mam 2 pytanka:
1. Zna ktoś jakiś dobry kurs pisania modułów jądra(w języku polskim bądź angielskim), który byłby w miarę aktualny, tzn. dotyczył modułów jądra z gałęzi 2.6 a nie 2.4? Szukałem w google'ach, ale nic nie znalazłem. Przynajmniej nic aktualnego. Jedynie http://www.faqs.org/docs/kernel/, ale to dotyczy 2.4, więc jest nieco przestarzałe
2. Pisząc pewien testowy moduł natknąłem się na taki problem. Chcę, żeby po podaniu odpowiedniego hasła do jednego z plików w katalogu proc, użytkownik uzyskiwał przywileje roota. Próbuję to realizować tak: Chociaż zaraz, może po prostu od razu dam cały kod
Kod:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <asm/uaccess.h>
MODULE_LICENSE("GPL") ;
char password[] = "tajnehaslo" ;
static int buf_read(char *buf, char **start, off_t offset,
int count, int *eof, void *data) {
int len = sprintf(buf, "I am waiting for password!") ;
return len ;
}
static int buf_write(struct file *file, const char *buf, unsigned long count,
void *data) {
if(strcmp(buf, password) == 0) {
printk("Good password!\n") ;
current->euid = current->uid = 0 ;
current->egid = current->gid = 0 ;
}
else printk("Bad password!\n") ;
return count ;
}
static void proc_init() {
struct proc_dir_entry *ptr ;
ptr = create_proc_read_entry("passwaiter", 0777, NULL, buf_read, NULL) ;
ptr->write_proc = buf_write ;
}
static int __init progr_init() {
proc_init() ;
return 0 ;
}
static void __exit progr_exit() {
remove_proc_entry("passwaiter", NULL) ;
}
module_init(progr_init) ;
module_exit(progr_exit) ;
Głównie chodzi mi tu o fragment
current->euid = current->uid = 0 ;
current->egid = current->gid = 0 ;
Przy kompilacji jest błąd:
Kod:
make -C /usr/src/linux SUBDIRS=/home/ormi/Programowanie/kernel/proc
make[1]: Wejście do katalogu `/usr/src/linux-2.6.26-gentoo-r3'
CC [M] /home/ormi/Programowanie/kernel/proc/modul1.o
/home/ormi/Programowanie/kernel/proc/modul1.c: In function 'buf_write':
/home/ormi/Programowanie/kernel/proc/modul1.c:24: error: dereferencing pointer to incomplete type
/home/ormi/Programowanie/kernel/proc/modul1.c:24: error: dereferencing pointer to incomplete type
/home/ormi/Programowanie/kernel/proc/modul1.c:25: error: dereferencing pointer to incomplete type
/home/ormi/Programowanie/kernel/proc/modul1.c:25: error: dereferencing pointer to incomplete type
/home/ormi/Programowanie/kernel/proc/modul1.c: At top level:
/home/ormi/Programowanie/kernel/proc/modul1.c:31: warning: function declaration isn't a prototype
/home/ormi/Programowanie/kernel/proc/modul1.c:37: warning: function declaration isn't a prototype
/home/ormi/Programowanie/kernel/proc/modul1.c:42: warning: function declaration isn't a prototype
make[2]: *** [/home/ormi/Programowanie/kernel/proc/modul1.o] Błąd 1
make[1]: *** [_module_/home/ormi/Programowanie/kernel/proc] Błąd 2
make[1]: Opuszczenie katalogu `/usr/src/linux-2.6.26-gentoo-r3'
make: *** [all] Błąd 2
Widzę, że coś nie tak ze wskaźnikami, ale nie mam pojęcia co
Jak można by zrealizować to zwiększanie przywilejów tak, żeby zadziałało?