question background
is now writing a firewall project based on Linux
netfilter
. There are some questions about the interaction between kernel and user mode programs
Program environment
centos7(3.10)
gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
C
problem description
kernel firewall program: a program (kernel)
user modifies firewall rule program: B program (user mode program)
now the conf file (firewall rule) accessed jointly by AGI B program is implemented through proc file, the specific location is / proc/firewall.conf
;
create proc
file through proc_create
. The code of creation
is as follows
struct file_operations proc_fops =
{
.llseek = seq_lseek,
.read=procf_read,
.write=procf_write,
};
mf_proc_file = proc_create("firewall.conf", 0644, NULL, &proc_fops);
in which procf_write
and procf_read
are implemented by myself (the code is a bit long, I won"t paste it here)
procf_write
is no problem, which is reflected in that I write to the configuration file through the B program, An is aware (firewall Filter effect changes)
the problem lies in the function procf_read
, not only can I not view the contents of the configuration file through the B program file open, And I can"t directly execute cat / prod/firewall.conf
. Worst of all, as soon as I check the configuration file (the), Linux system crashes directly through the above two methods, I can"t enter any instructions, so I can only repair it by restarting
problem analysis
you can locate the problem on the procf_read
function. Here is the definition of this function
int procf_read(char *buffer, char **buffer_location, off_t offset, int buffer_length, int *eof, void *data)
/*
**buffer
*/
it"s stuck here right now. I don"t know why. it"s not easy to ask questions, if you are the one