printkはシステムのクラッシュを引き起こす
具体的な例は次のとおりです.
printk(KERN_ERR "random addess s is: %s",(char *)0X00000333); 出力:random addess is:(null)
printk(KERN_ERR "random addess s is: %s",(char *)0X000003333); システムのクラッシュを引き起こす
printkのソースコードを分析した結果、次のことがわかりました.
printk-->vsnprintf-->string
4096を超えると、このアドレスに文字列を取りに行くとmemory異常が発生し、システムが潰れてしまいます.
printk(KERN_ERR "random addess s is: %s",(char *)0X00000333); 出力:random addess is:(null)
printk(KERN_ERR "random addess s is: %s",(char *)0X000003333); システムのクラッシュを引き起こす
printkのソースコードを分析した結果、次のことがわかりました.
printk-->vsnprintf-->string
char *string(char *buf, char *end, const char *s, struct printf_spec spec)
{
int len, i;
// flash page ( flash page size 4096)
// “null”
if ((unsigned long)s < PAGE_SIZE)
s = "(null)";
return buf;
}
4096を超えると、このアドレスに文字列を取りに行くとmemory異常が発生し、システムが潰れてしまいます.