亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: LDD3 short.c 問題 [打印本頁]

作者: wzw200    時間: 2014-05-29 17:48
標(biāo)題: LDD3 short.c 問題

irqreturn_t short_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
        struct timeval tv;
        int written;

        do_gettimeofday(&tv);

        written = sprintf((char *)short_head,"%08u.%06u\n",(int)(tv.tv_sec % 100000000), (int)(tv.tv_usec));  //這個不是有可能越界嗎,為什么還這樣用啊,
       
        short_incr_bp(&short_head, written);
        wake_up_interruptible(&short_queue); /* awake any reading process */
        return IRQ_HANDLED;
}

整個程序我沒有運行起來,只是看看,

自己實驗的:

unsigned long short_buffer = 0;
int short_init(void)
{
    int i=0;
    short_buffer = __get_free_pages(GFP_KERNEL,0);
    i=sprintf((char*)short_buffer+1024*1024*1024,"%d",1);  //出問題了
    printk("init----------end:%d\n",i);
    return 0;
}
作者: wzw200    時間: 2014-05-29 18:32
為什么沒有人呢,我反復(fù)看了這個例子,他不斷的 short_incr_bp(&short_head, written);,覺得早晚會越界啊,不知道理解對不對,
作者: Tinnal    時間: 2014-05-29 22:28
回復(fù) 2# wzw200


你的程序都不全,要人怎么看!還要別人先給構(gòu)把LDD的原碼搜出來嗎。要問問題,先把涉及的關(guān)鍵代碼都貼出來。

   
作者: mnipxh    時間: 2014-05-29 23:12
本帖最后由 mnipxh 于 2014-05-29 23:15 編輯

short_incr_bp中處理了越界的情況,注意是16字節(jié)對齊的。

lz看代碼比我還不仔細(xì)。
作者: wzw200    時間: 2014-05-30 08:37
回復(fù) 4# mnipxh

你看清楚了,上面是先sprintf 之后才處理的,如果我這一次SPRINTF越界了,再處理嗎,他是一個環(huán)
作者: wzw200    時間: 2014-05-30 08:40
上傳了代碼,把 short.gz 修改成 short.c就可以了,代碼只用到了629行的中斷,其它的中斷相關(guān)的可以不用看

short.gz

17.24 KB, 下載次數(shù): 8


作者: wzw200    時間: 2014-05-30 08:46
回復(fù) 3# Tinnal

上傳了代碼有空看看吧,謝謝
   
作者: 黎明748    時間: 2014-05-30 13:22
怎么會越界。。。
作者: 黎明748    時間: 2014-05-30 13:45
"%08u.%06u\n"是16個字節(jié).4096/16=256.所以sprintf是不會越界的.new最大值為short_buffer+PAGE_SIZE。不會大于short_buffer+PAGE_SIZE。除非出錯
作者: wzw200    時間: 2014-05-30 17:46
謝謝樓上幾回的回復(fù),我想明白了,16對齊,是這樣的,
作者: wzw200    時間: 2014-05-30 17:58
回復(fù) 9# 黎明748

還在嗎,我明白了不會越界,不過我看了,他只有斷空,沒有斷滿,直接覆蓋了對嗎,
   
作者: 黎明748    時間: 2014-05-30 19:41
回復(fù) 11# wzw200


    就是回到起始地址覆蓋




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2