Contenido   Archivos   Índice   Bugs   Ejemplos  

Funciones auxiliares existentes que se modificaron
[Todas las funciones auxiliares del núcleo involucradas en Lisex 0.0]


Funciones

int inode_change_ok (struct inode *inode, struct iattr *attr)
 Función indirectamente usada por sys_fchmod(), sys_truncate() y sys_truncate64().

int inode_setattr (struct inode *inode, struct iattr *attr)
 Función indirectamente usada por sys_fchmod(), sys_truncate() y sys_truncate64().

file * open_exec (const char *name)
 No fue modificada pero usa permission().

int prepare_binprm (struct linux_binprm *bprm)
 Función usada por do_execve().

void clear_inode (struct inode *inode)
 Limpia un inodo.

void clean_inode (struct inode *inode)
 Esta función inicializa los campos del inodo con valores conocidos antes de retornarlo.

int vfs_permission (struct inode *inode, int mask)
 Consulta permisos.

int permission (struct inode *inode, int mask)
 Es sinónimo de vfs_permission().

int link_path_walk (const char *name, struct nameidata *nd)
 Resolución de nombres.

int may_delete (struct inode *dir, struct dentry *victim, int isdir)
 Verifica si es posible o no eliminar el enlace victim del directorio dir, verifica si el tipo de victim es correcto.

int may_create (struct inode *dir, struct dentry *child)
 Verifica si es posible crear un objeto con dentry child en el directorio dir.

int mount_is_safe (struct nameidata *nd)
 No fue modificada paro usa permission().

int chown_common (struct dentry *dentry, uid_t user, gid_t group)
 Esta función es utilizada por sys_chown() y sys_lchown().

int cp_old_stat (struct inode *inode, struct __old_kernel_stat *statbuf)
 Esta función es utilizada por las llamadas sys_stat() y sys_fstat().

int cp_new_stat (struct inode *inode, struct stat *statbuf)
 Esta función es utilizada por las llamadas sys_newstat() y sys_newfstat().

long cp_new_stat64 (struct inode *inode, struct stat64 *statbuf)
 Esta función es utilizada por las llamadas sys_stat64(), sys_fstat64() y sys_lstat64().


Documentación de las funciones

int prepare_binprm struct linux_binprm *    bprm
 

Función usada por do_execve().

Se modificó el chequeo de permisos, que se efectuaba directamente leyendo el modo del inodo, de forma que ahora se hace utilizando permission().

void clear_inode struct inode *    inode
 

Limpia un inodo.

Es llamada por el sistema de archivos para indicar que el inodo ya no es útil.

Parámetros:
inode inodo a limpiar

void clean_inode struct inode *    inode [static]
 

Esta función inicializa los campos del inodo con valores conocidos antes de retornarlo.

i_sb, i_ino, i_count, i_state y las listas han sido inicializados en otra parte.

int vfs_permission struct inode *    inode,
int    mask
 

Consulta permisos.

Determina si los permisos que se encuentran en una máscara que se pasa como párametro se encuentran en la ACL de un inodo.

Parámetros:
inode Puntero al inodo al cual se le quieren consultar los permisos.
mask Permisos que se van a comparar con los permisos resultantes de la ACL de inode. Estos pueden ser:
y combinaciones. Se ha cambiado la utilización de permissions() para que se usen los nuevos parámetros.

Devuelve:
  • -EROFS Si mask contiene permiso de escritura e inode está en un sistema de archivos de sólo lectura, y el modo UNIX de inode indica que: o es un registro, o un directorio o un link.
  • -EACCES Si mask contiene permiso de escritura e inode es inmutable.
  • 0 Si todos los permisos que contiene mask se encuentran en la ACL de inode. En caso de que inode sea un inodo de un directorio no se tienen en cuenta los permisos de ejecutabilidad.

int link_path_walk const char *    name,
struct nameidata *    nd
 

Resolución de nombres.

Esta es la función básica encargada de la resolución de nombres, convirtiendo un camino en un dentry.

Documentación original: "We expect 'base' to be positive and a directory".

Se cambió la semántica para que se requiera lectura en los directorios intermedios (en lugar de EXEC). Dependiendo del valor de current->link_count sigue o no los links.

Parámetros:
name El camino que se debe resolver.
nd Buffer donde el camino que se resolvió es devuelto.

int may_delete struct inode *    dir,
struct dentry *    victim,
int    isdir
[inline, static]
 

Verifica si es posible o no eliminar el enlace victim del directorio dir, verifica si el tipo de victim es correcto.

  1. No es posible hacerlo si dir es de sólo lectura (efectuado en permission()).
  2. Es necesario tener permiso de lecto-escritura en dir (Lisex !!!).
  3. No es posible eliminar nada de dir si es append-only.
  4. No es posible hacer nada si dir es inmutable (efectuado en permission()).
  5. Si el sticky bit está prendido en dir, es necesario:
    • ser el dueño de dir, o
    • ser el dueño de victim.
  6. Si victim es append-only o inmutable no es posible hacer nada con los enlaces que apuntan a él.
  7. Si se pide remover un directorio y victim no lo es, -ENOTDIR.
  8. Si se pide remover algo que no es un directorio y victim no es de ese tipo, -EISDIR.
  9. No es posible remover una raíz o un punto de montaje.

Parámetros:
dir Directorio padre del enlace que se quiere borrar.
victim dentry que apunta al enlace que se quiere eliminar.
isdir Determina si victim es un directorio o no.
Devuelve:
  • 0 Si el usuario que realiza la operación puede abrir dir.
  • ERROR Si el usuario que realiza la operacion NO puede abrir dir.

int may_create struct inode *    dir,
struct dentry *    child
[inline, static]
 

Verifica si es posible crear un objeto con dentry child en el directorio dir.

  1. No es posible hacerlo si child ya existe (sys_open() tiene un tratamiento especial para este caso, pero como esta función es inline está bien)
  2. No es posible hacerlo si dir es de sólo lectura (efectuado en permission())
  3. No es posible hacerlo si el usuario no puede abrir el directorio padre en modo read-write (Lisex!!!)
  4. No es posible hacerlo si dir es inmutable (efectuado en permission())

Parámetros:
dir Directorio padre del archivo que se quiere borrar
child dentry que apunta al archivo que se quiere eliminar
Devuelve:
  • 0 Si el usuario que realiza la operación puede abrir el archivo.
  • ERROR Si el usuario que realiza la operación NO puede abrir el archivo.

int chown_common struct dentry *    dentry,
uid_t    user,
gid_t    group
[static]
 

Esta función es utilizada por sys_chown() y sys_lchown().

Parámetros:
dentry Dentry que contiene un puntero al inodo sobre el cual se le realizará la operación.
user Identificación del usuario que pasará a ser usuario dueño del inodo.
group Identificacion del grupo que pasara a ser grupo primario del inodo.
Postcondición:
Cambia el usuario dueño tradicional y grupo primario tradicional del inodo al que apunta dentry, por user y group respectivamente. Se agregan a la ACL del inodo al que apunta dentry permisos para user y group. Estos permisos son los mismos que tenían los antiguos usuario dueño y grupo primario. Estos últimos son eliminados de la ACL.
Devuelve:
  • -ENOENT Si dentry no apunta a un inodo válido.
  • -EROFS Si el inodo al que apunta dentry es read-only.
  • -EPERM Si el inodo al que apunta dentry es inmutable o append???
  • ACL_OK Si la operación se realizó con éxito.

Bug:
No verifica si va a haber espacio para la operación!!

int cp_old_stat struct inode *    inode,
struct __old_kernel_stat *    statbuf
[static]
 

Esta función es utilizada por las llamadas sys_stat() y sys_fstat().

Se cambió el código que realizaba el cálculo del modo, el nuevo código calcula el modo utilizando la ACL del inodo que se pasa como párametro. Esta función carga en statbuf información que obtiene del inodo inode.

Parámetros:
inode Inodo sobre el cual se realiza la operación.
statbuf Buffer donde se cargan los resultados.
Devuelve:
  • -EFAULT Si no se pudo concretar la copia de los datos a statbuf
  • 0 Si la operación se realizó con éxito.

int cp_new_stat struct inode *    inode,
struct stat *    statbuf
[static]
 

Esta función es utilizada por las llamadas sys_newstat() y sys_newfstat().

Se cambió el código que realizaba el cálculo del modo, el nuevo código calcula el modo utilizando la ACL del inodo que se pasa como párametro. Los párametros y lo que devuelve es igual a cp_old_stat().

long cp_new_stat64 struct inode *    inode,
struct stat64 *    statbuf
[static]
 

Esta función es utilizada por las llamadas sys_stat64(), sys_fstat64() y sys_lstat64().

Se cambió código que realizaba el cálculo del modo, el nuevo código calcula el modo utilizando la ACL del inodo que se pasa como parámetro. Los parámetros y lo que devuelve es igual a cp_old_stat().


Generado el Fri Jan 10 09:11:43 2003 para Lisex por doxygen1.3-rc2