[ LUGOS ] Re: Kernel Patch...

Damjan Lampret damjan.lampret na arnes.si
Tor Jun 1 13:26:38 CEST 1999


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 <bigwhale na m42.cx>
To: Lugos List <lugos-list na lugos.si>
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!
>





Dodatne informacije o seznamu Starilist