Pour apprendre à mieux comprendre le noyau linux, je tente de modifier une fonction système (en l'occurrence sys_chmod).
Ma modification consiste à faire des vérifications sur un fichier pour autoriser ou non la mise de certains droits (vérification d'une signature en fin de fichier). Pour cela, je fais les appels suivants,dans une sous fonction (je ne détaille pas les vérifications sur les ouvertures de fichier, ...) :
int fichier;
int ret;
char buffer[50];
fichier = sys_open(fichier,0,0);
ret = sys_read(fichier, buffer, 50);
printk("%s\n",buffer);
Ce qu'il se passe, c'est que rien n'est lu du tout (ou du moins le buffer parait vide). La valeur de retour de sys_read est 14 (EFAULT : bad adress).
J'aimerais savoir si je m'y prends mal pour faire mes appels systèmes. Et surtout, comment remédier à mon problème.
Merci
# Alloc
Posté par Ph Husson (site web personnel) . Évalué à 2.
# sys_open
Posté par TheBreton . Évalué à 1.
Il n'est pas encouragé de faire une invocation sys_* depuis un modules (c'est même vivement décourager sauf quelques cas).
pour le faire quand même il faut changer d'espace mémoire afin que les test de cohérence n'échoue plus.
#include <asm/uaccess.h>
mm_segment fs;
fs=get_fs();
set_fs(get_ds());
//Apelle a tes routine
fichier = sys_open(fichier,0,0);
ret = sys_read(fichier, buffer, 50);
set_fs(fs).
[^] # Re: sys_open
Posté par gaalan . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.