qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 16/22] Implement mincore(2)


From: Richard Henderson
Subject: Re: [PATCH 16/22] Implement mincore(2)
Date: Sun, 20 Aug 2023 07:55:14 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0

On 8/19/23 02:48, Karim Taha wrote:
+/* mincore(2) */
+static inline abi_long do_bsd_mincore(abi_ulong target_addr, abi_ulong len,
+        abi_ulong target_vec)
+{
+    abi_long ret;
+    void *p, *a;
+
+    a = lock_user(VERIFY_WRITE, target_addr, len, 0);
+    if (a == NULL) {
+        return -TARGET_EFAULT;
+    }
+    p = lock_user_string(target_vec);
+    if (p == NULL) {
+        unlock_user(a, target_addr, 0);
+        return -TARGET_EFAULT;
+    }
+    ret = get_errno(mincore(a, len, p));
+    unlock_user(p, target_vec, ret);
+    unlock_user(a, target_addr, 0);
+
+    return ret;

This is wrong.

(1) VERIFY_WRITE is incorrect. Here you need a combination of guest_range_valid_untagged and page_check_range(addr, len, PAGE_VALID).

(2) vec is not a string, it is an array of size DIV_ROUND_UP(len, TARGET_PAGE_SIZE). For that, you do want lock_user(VERIFY_WRITE).


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]