Re: Intercepting unlink system call

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Please try to send the code as inline attachment, its easy to comment
on code in that case.

Well read my comments inlined in your code below.

> #include <linux/kernel.h>
> #include <linux/unistd.h>
> #include <linux/module.h>
> #include<linux/linkage.h>
> /*#include<linux/syscall.h>*/
> 
> unsigned long  *sys_call_table;
> asmlinkage unsigned long (*original_call)(const char*);
> 
> asmlinkage long  our_sys_unlink(const char *filename )
> {
>   printk("File is about to get deleted " ); /* print a message when a file is to be 
> deleted*/
>   printk("%s",filename);

You should not do this, as file name is the pointer to user memory and
user memory can any time be swaped out, so you first do copy the
filename from user buffer to kernel buffer using copy_from_user
function and then pass the pointer to your kernel buffer to printk()

>   return original_call(filename); /* call the function at orignal address to remove the file*/
> }
> 
> int init_module()
> {
> 
>   sys_call_table = (unsigned long *)0xc030a0f0;  /* this address can be found by 

where is "sys_call_table" defined in your module, are you trying to
set the kernel's system call table here ? For this you need to define
your global pointer variable in a module and  and assign this address
to that pointer. Dont name the pinter as "sys_call_table", as the
system call table of kernel is also named the same. You define it as a
global in your module. Do define it as unsigned long pointer.

unsigned long * mod_sys_call_table = (unsigned long *)0xc030a0f0;

-Gaurav

> command grep sys_call_table /boot/System.map-2.4.26 where 2.4.26 is system 
> release which can change and can be obtained by uname -r*/
> 
>   printk("<1> In init function\n ");
>   original_call= sys_call_table[__NR_unlink]; /* save the original address*/
>   sys_call_table[__NR_unlink]=our_sys_unlink;   /* replace the address by our function*/
>   return 0;
>  }
> 
> int cleanup_module()
> {
>   sys_call_table[__NR_unlink]=original_call; /* replace orignal address again*/
>  return 0;
> }


On 6/2/05, Dipti Pawar <dipti.pawar@xxxxxxxxx> wrote:
>  
>  
> 
> Hi 
> 
> I am trying to intercept unlink system call. 
> 
> I have attached a code here that I tried. 
> 
> But it's not working. 
> 
> Can anyone tell me the reason or bugs in this code and the information to
> proceed ahead? 
> 
>   
> 
> Regards, 
> 
> Dipti. 
> 
>   
> 
>   
> 
>   
> 
>   
> 
>   
> http://www.patni.com
>  World-Wide Partnerships. World-Class Solutions. 
> _____________________________________________________________________
>  
>  This e-mail message may contain proprietary, confidential or legally
> privileged information for the sole use of the person or entity to whom this
> message was originally addressed. Any review, e-transmission dissemination
> or other use of or taking of any action in reliance upon this information by
> persons or entities other than the intended recipient is prohibited. If you
> have received this e-mail in error kindly delete this e-mail from your
> records. If it appears that this mail has been forwarded to you without
> proper authority, please notify us immediately at netadmin@xxxxxxxxx and
> delete this mail. 
> _____________________________________________________________________
>

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux