I have a doubt.
I opened the kernel and I changed the directory linux-3.1.1/fs/open.c
I changed the follow code in the open.c.
SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode)
{
long ret;
printk(KERN_EMERG "Testing\n");
...
}
I put this line only: printk(KERN_EMERG "Testing");
And I include the libraries:<linux/kernel.h>
and <linux/printk.h>
So I compiled and rebooted my linux(Ubuntu). During the rebooting appeared a lot of "Testing" on the screen. So up to now its Ok.
But now I have a problem. I created this program in c.
int main()
{
size_t filedesc = open("testefile2.txt",O_CREAT | O_WRONLY,0640);
printf("%d",filedesc);
}
I compiled this program and executed and works good. But I don´t understand why the "Testing" didn't appeared on the shell. I mean , if when I reboot the pc appeared a lot of the word "Testing" , why this word doens´t appear when I execute the program above. Just to add I include this libraries in this code above:
unistd.h
, fcntl.h
, stdio.h
, stdlib.h
Thank you guys.
I think, this is effect of printk's messages suppression. (more exactly:rate limiting)
Check the messages log or console for
string.
This feature will stop printing a message, if there were a lot of messages in recent time.
Actual code is as 3.1 kernel: http://lxr.linux.no/#linux+v3.1.1/kernel/printk.c#L1621
So, As the
open
syscall is very-very popular (just do anstrace -e open /bin/ls
- I'll get 15open
syscalls for just starting an simplestls
), the rate limiting will be in effect. It will limit your message to be printed only one time in 5 seconds; not more than 10 messages in single "burst".I can only suggest to create a special user with known UID and add an UID checking before
printk
in your additional printk-in-open code.