<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial">Hello<div>I have an idea, to add some changes to the kernel, like the kmemcheck, to help to check the kernel memory.</div><div><br></div><div>&nbsp;I call it kernel_module_check_framework, it can check the memory buffer overflow errors and others.</div><div>The memory buffer is what the user want to monitor, not the whole system's memory. User can add/delete the memory buffers to the framework.</div><div>The framework provide four interface, register/unregister functions, add/delete functions. User can utilize the interface to do some works.</div><div><br></div><div><span style="line-height: 1.7;">When user add/delete a memory buffer, the framework will store the memory information and set the all the pages which contains the memory buffer&nbsp;</span><span style="line-height: 1.7;">none-present</span><span style="line-height: 1.7;">&nbsp;.</span></div><div><span style="line-height: 1.7;">Then, when an access to this page, the framework will check whether the access is in the monitored buffers. If it is hit, the framework will&nbsp;</span><span style="line-height: 1.7;">set the page present and&nbsp;execute the interface function(or the hook function), at last&nbsp;</span>change<span style="line-height: 1.7;">&nbsp;the regs-&gt;flags to make the CPU to be the s</span>ingle step debugging mode. If not, let the kernel to handle it.</div><div>Cause the&nbsp;<span style="line-height: 1.7;">s</span><span style="line-height: 1.7;">ingle step</span><span style="line-height: 1.7;">&nbsp;</span>debugging&nbsp;<span style="line-height: 1.7;">&nbsp;mode, kernel will step into the do_debug functions in the traps.c file, and make the page none-present again, at last restore the regs-&gt;flags.</span></div><div>There, the framework can&nbsp;<span style="line-height: 1.7;">catch</span><span style="line-height: 1.7;">&nbsp;the another access in the same page.</span></div><div>When unregister, the framework will recovery all the pages, and show something.</div><div><br></div><div><span style="line-height: 1.7;">As&nbsp;</span>mentioned<span style="line-height: 1.7;">&nbsp;</span>above, the&nbsp;<span style="line-height: 1.7;">interface function</span><span style="line-height: 1.7;">(or the hook function)</span><span style="line-height: 1.7;">,&nbsp;</span><span style="line-height: 1.7;">it is a function pointer, at first is NULL, when the user register to the framework, the pointer will change to the user's handler. So, the framework's main handler is implemented by users.</span></div><div><br></div><div>To implement the framework, I will change the fault.c, traps.c and will add new files. It sounds like the kmemcheck, but not the same, my framework intents to capture each access in the <span style="line-height: 1.7;">memory&nbsp;buffers that are&nbsp;</span>dynamically<span style="line-height: 1.7;">&nbsp;added or deleted by users, and&nbsp;let user to handler it. For example, the user can write a module to monitor a process's specified memory buffers with the framework, can statistic the buffer write,read times and&nbsp;</span>somethings. Or user can develop a module to check memory access overflow errors with it.</div><div><br></div><div>I don't know whether the design is&nbsp;feasible? &nbsp;Any one can give some advises?</div><div><br></div><div>Thanks,&nbsp;</div><div>HeChuan</div></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>