From: Dan Carpenter <dan.carpenter@linaro.org>
To: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: intel-xe@lists.freedesktop.org
Subject: [bug report] drm/xe/uapi: Add UAPI for querying VMA count and memory attributes
Date: Thu, 28 Aug 2025 12:01:05 +0300 [thread overview]
Message-ID: <aLAa0ZEWi5mGed2S@stanley.mountain> (raw)
Hello Himal Prasad Ghimiray,
Commit 418807860e94 ("drm/xe/uapi: Add UAPI for querying VMA count
and memory attributes") from Aug 21, 2025 (linux-next), leads to the
following Smatch static checker warning:
drivers/gpu/drm/xe/xe_vm.c:2298 xe_vm_query_vmas_attrs_ioctl()
warn: maybe return -EFAULT instead of the bytes remaining?
drivers/gpu/drm/xe/xe_vm.c
2240 int xe_vm_query_vmas_attrs_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
2241 {
2242 struct xe_device *xe = to_xe_device(dev);
2243 struct xe_file *xef = to_xe_file(file);
2244 struct drm_xe_mem_range_attr *mem_attrs;
2245 struct drm_xe_vm_query_mem_range_attr *args = data;
2246 u64 __user *attrs_user = u64_to_user_ptr(args->vector_of_mem_attr);
2247 struct xe_vm *vm;
2248 int err = 0;
2249
2250 if (XE_IOCTL_DBG(xe,
2251 ((args->num_mem_ranges == 0 &&
2252 (attrs_user || args->sizeof_mem_range_attr != 0)) ||
2253 (args->num_mem_ranges > 0 &&
2254 (!attrs_user ||
2255 args->sizeof_mem_range_attr !=
2256 sizeof(struct drm_xe_mem_range_attr))))))
2257 return -EINVAL;
2258
2259 vm = xe_vm_lookup(xef, args->vm_id);
2260 if (XE_IOCTL_DBG(xe, !vm))
2261 return -EINVAL;
2262
2263 err = down_read_interruptible(&vm->lock);
2264 if (err)
2265 goto put_vm;
2266
2267 attrs_user = u64_to_user_ptr(args->vector_of_mem_attr);
2268
2269 if (args->num_mem_ranges == 0 && !attrs_user) {
2270 args->num_mem_ranges = xe_vm_query_vmas(vm, args->start, args->start + args->range);
2271 args->sizeof_mem_range_attr = sizeof(struct drm_xe_mem_range_attr);
2272 goto unlock_vm;
2273 }
2274
2275 mem_attrs = kvmalloc_array(args->num_mem_ranges, args->sizeof_mem_range_attr,
2276 GFP_KERNEL | __GFP_ACCOUNT |
2277 __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
2278 if (!mem_attrs) {
2279 err = args->num_mem_ranges > 1 ? -ENOBUFS : -ENOMEM;
^^^^^^^^^^^^^^^^^^^^^^^^
This is a weird check. If args->num_mem_ranges is zero, then kmalloc()
will succeed with the ZERO_SIZE_PTR. If it's 1, then
args->sizeof_mem_range_attr is quite small. 64 bytes. The allocation will
succeed as well. In real life err will never be set to -ENOBUFS.
2280 goto unlock_vm;
2281 }
2282
2283 memset(mem_attrs, 0, args->num_mem_ranges * args->sizeof_mem_range_attr);
2284 err = get_mem_attrs(vm, &args->num_mem_ranges, args->start,
2285 args->start + args->range, mem_attrs);
2286 if (err)
2287 goto free_mem_attrs;
2288
2289 err = copy_to_user(attrs_user, mem_attrs,
2290 args->sizeof_mem_range_attr * args->num_mem_ranges);
copy_to_user() returns the number of bytes it failed to copy. It should
be:
if (copy_to_user(...))
err = -EFAULT;
2291
2292 free_mem_attrs:
2293 kvfree(mem_attrs);
2294 unlock_vm:
2295 up_read(&vm->lock);
2296 put_vm:
2297 xe_vm_put(vm);
--> 2298 return err;
2299 }
regards,
dan carpenter
next reply other threads:[~2025-08-28 9:01 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-28 9:01 Dan Carpenter [this message]
2025-08-28 9:40 ` [bug report] drm/xe/uapi: Add UAPI for querying VMA count and memory attributes Ghimiray, Himal Prasad
2025-08-29 9:05 ` Dan Carpenter
2025-09-01 5:29 ` Ghimiray, Himal Prasad
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aLAa0ZEWi5mGed2S@stanley.mountain \
--to=dan.carpenter@linaro.org \
--cc=himal.prasad.ghimiray@intel.com \
--cc=intel-xe@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox