Zivjo,

seg faulte dobivas, ker open_namei v nekaterih primerih ne vrne regularnega
pointerja, ti pa gres vseeno preverjati attribute datoteke, ki sploh ne
obstaja.
Bolj natacno, pointer ne kaze na dentry strukturo. Se dobro, da v vecini
primerov deluje.

V primeru groff-a le-ta namrec zazene troff, ki ga isce v direktorijih PATH
spremenljivke. Celotna zadeva izgleda priblizno tako, da se klice
do_execve funkcija s posameznimi potmi in pripetim imenom troff. Ker se
ti troff pojavi sele v kaksnem tretjem primeru, ti funkcija open_namei
vraca neveljaven pointer (vendar ne nujno pravi NULL pointer !). V teh
primerih se preverjanje ne more opraviti, zato seg fault.
To je razlog, zakaj pri groff (in make in se kje) zadeva ne dela pravilno.

Lahko pa dodas se kaksen printk z obvestilom za katero datoteko in
uporabnika gre.

Resitev; enostavno malo zamenjas vrstni red. Primer (nisem preizkusil, zato
pozor !):

 dentry = open_namei(filename, 0, 0);

 retval = PTR_ERR(dentry);
 if (IS_ERR(dentry))
           return retval;
/* Added */
if ((dentry->d_inode->i_mode & (S_IWGRP | S_IWOTH) ||
     dentry->d_inode->i_uid) &&
    (dentry->d_inode->i_mode & (S_IWGRP | S_IWOTH) ||
     dentry->d_inode->i_gid != 101)) {
   printk("UID %u trying to execute %s\n", sys_getuid(), filename);
   return -EACCES;
}
/* -- */

lp, Damjan


----- Original Message -----
From: David Klasinc <[EMAIL PROTECTED]>
To: Lugos List <[EMAIL PROTECTED]>
Sent: Saturday, May 29, 1999 9:18 PM
Subject: [ LUGOS ] Re: Kernel Patch...


> Banzai!
>
> Umm... Kaj je bilo moje vprasanje... Aja...
>
> Po postavitvi sistema s tistim opravkom, se mi dogaja, da nekaterih
> datotek ni mogoce izvajat... recimo make, groff, ... pa se kaka bi se
> nasela...
>
> make vrze ven Seg Fault... gdb ne pokaze nic pametnega, strace pa tudi
> ne...
>
> David!
> ----------------
> Windows 95 - A 500MB multimedia solitaire game!
>

Одговори путем е-поште