2017-02-10 115 views
0

我一直在努力,但沒有取得任何進展。如何發送動態數組到copy_to_user(內核模塊)

我想發送一個動態數組從內核到用戶空間。看起來,靜態數組很容易發送到用戶空間,但我得到的填充,我沒有做正確的動態陣列的東西正確的靜態或固定的變量,如int a,char b [100]可以很好地工作與動態陣列

put_user或copy_to_user。但是當我嘗試傳遞指針時,系統調用會被終止或發生錯誤。

是否可以使用copy_to_user發送動態數組? 我一直在努力解決這個問題,但我渴望獲得幫助,並虛心尋求你的指導。

謝謝。

回答

0

在用戶空間,

memcpy(&data.items, ...) 

不起作用:這將覆蓋data_t.items字段的存儲,而不是它的指向數組。但這正是你的內核代碼試圖做的。

而是要複製到items指向的內存。這看起來像

memcpy(data.items, ...) 
在用戶空間

void *user_items; 
get_user(&user_items, &from->items); 
copy_to_user(user_items, ...); 

在內核,因爲你需要先閱讀字段的值。

+0

感謝您的回覆,但我不明白memcpy [data.items,...],我們在哪裏使用它並將其分配給? –

+0

@SunghoHong'copy_to_user(&from-> items,...)'等同於'memcpy(&data.items,...)'。我希望明白爲什麼第二個是錯誤的,並且通過類比理解爲什麼第一個錯誤。 – ephemient

+0

不,沒有必要在內核中添加任何額外的內存「kmalloc」。你已經有了一個'items'數組,你只需要將它複製到正確的地方 - 你現在將它複製到錯誤的地方。 – ephemient