//------------------------------------------------------------------- // demo.c // // This module creates a '/proc' pseudo-file that displays the // effect of executing the 'set_fs( get_ds() )' statement upon // the 'addr_limit' field in the task's process descriptor. // // NOTE: Written and tested with Linux kernel version 2.4.20. // // programmer: ALLAN CRUSE // written on: 10 FEB 2003 //------------------------------------------------------------------- #define __KERNEL__ #define MODULE #include // for init_module() #include // for create_proc_read_entry() #include // for set_fs(), get_ds() #define SUCCESS 0 static char modname[] = "demo"; static int my_proc_read( char *buf, char **start, off_t off, int count, int *eof, void *data ) { unsigned long *lp = (unsigned long*)current; int i, len; len = 0; len += sprintf( buf+len, "\nBEFORE: \n" ); for (i = 0; i < 5; i++) len += sprintf( buf+len, "%08X ", lp[i] ); len += sprintf( buf+len, "\n" ); set_fs( get_ds() ); len += sprintf( buf+len, "\nAFTER: \n" ); for (i = 0; i < 5; i++) len += sprintf( buf+len, "%08X ", lp[i] ); len += sprintf( buf+len, "\n" ); len += sprintf( buf+len, "\n" ); *eof = 1; return len; } void cleanup_module( void ) { remove_proc_entry( modname, NULL ); printk( "<1>Removing \'%s\' module\n", modname ); } int init_module( void ) { printk( "<1>\nInstalling \'%s\' module\n", modname ); create_proc_read_entry( modname, 0, NULL, my_proc_read, NULL ); return SUCCESS; } MODULE_LICENSE("GPL");