[Intel-gfx] [drm-intel:drm-intel-gt-next 7/8] drivers/gpu/drm/i915/selftests/intel_memory_region.c:227 igt_mock_reserve() error: 'mem' dereferencing possible ERR_PTR()
Dan Carpenter
dan.carpenter at oracle.com
Fri Jul 2 09:30:32 UTC 2021
tree: git://anongit.freedesktop.org/drm-intel drm-intel-gt-next
head: 13c2ceb6addb6b14468e09b75832c98909eed8e7
commit: d53ec322dc7de32a59bf1c2a56b93e90fc2f1c28 [7/8] drm/i915/ttm: switch over to ttm_buddy_man
config: x86_64-randconfig-m001-20210630 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>
Reported-by: Dan Carpenter <dan.carpenter at oracle.com>
New smatch warnings:
drivers/gpu/drm/i915/selftests/intel_memory_region.c:227 igt_mock_reserve() error: 'mem' dereferencing possible ERR_PTR()
vim +/mem +227 drivers/gpu/drm/i915/selftests/intel_memory_region.c
adeca641bcb64f Abdiel Janulgue 2021-01-27 153 static int igt_mock_reserve(void *arg)
adeca641bcb64f Abdiel Janulgue 2021-01-27 154 {
adeca641bcb64f Abdiel Janulgue 2021-01-27 155 struct intel_memory_region *mem = arg;
d53ec322dc7de3 Matthew Auld 2021-06-16 156 struct drm_i915_private *i915 = mem->i915;
adeca641bcb64f Abdiel Janulgue 2021-01-27 157 resource_size_t avail = resource_size(&mem->region);
adeca641bcb64f Abdiel Janulgue 2021-01-27 158 struct drm_i915_gem_object *obj;
adeca641bcb64f Abdiel Janulgue 2021-01-27 159 const u32 chunk_size = SZ_32M;
adeca641bcb64f Abdiel Janulgue 2021-01-27 160 u32 i, offset, count, *order;
adeca641bcb64f Abdiel Janulgue 2021-01-27 161 u64 allocated, cur_avail;
adeca641bcb64f Abdiel Janulgue 2021-01-27 162 I915_RND_STATE(prng);
adeca641bcb64f Abdiel Janulgue 2021-01-27 163 LIST_HEAD(objects);
adeca641bcb64f Abdiel Janulgue 2021-01-27 164 int err = 0;
adeca641bcb64f Abdiel Janulgue 2021-01-27 165
adeca641bcb64f Abdiel Janulgue 2021-01-27 166 count = avail / chunk_size;
adeca641bcb64f Abdiel Janulgue 2021-01-27 167 order = i915_random_order(count, &prng);
adeca641bcb64f Abdiel Janulgue 2021-01-27 168 if (!order)
adeca641bcb64f Abdiel Janulgue 2021-01-27 169 return 0;
adeca641bcb64f Abdiel Janulgue 2021-01-27 170
d53ec322dc7de3 Matthew Auld 2021-06-16 171 mem = mock_region_create(i915, 0, SZ_2G, I915_GTT_PAGE_SIZE_4K, 0);
d53ec322dc7de3 Matthew Auld 2021-06-16 172 if (IS_ERR(mem)) {
d53ec322dc7de3 Matthew Auld 2021-06-16 173 pr_err("failed to create memory region\n");
d53ec322dc7de3 Matthew Auld 2021-06-16 174 err = PTR_ERR(mem);
d53ec322dc7de3 Matthew Auld 2021-06-16 175 goto out_close;
"mem" is an error pointer.
d53ec322dc7de3 Matthew Auld 2021-06-16 176 }
d53ec322dc7de3 Matthew Auld 2021-06-16 177
adeca641bcb64f Abdiel Janulgue 2021-01-27 178 /* Reserve a bunch of ranges within the region */
adeca641bcb64f Abdiel Janulgue 2021-01-27 179 for (i = 0; i < count; ++i) {
adeca641bcb64f Abdiel Janulgue 2021-01-27 180 u64 start = order[i] * chunk_size;
adeca641bcb64f Abdiel Janulgue 2021-01-27 181 u64 size = i915_prandom_u32_max_state(chunk_size, &prng);
adeca641bcb64f Abdiel Janulgue 2021-01-27 182
adeca641bcb64f Abdiel Janulgue 2021-01-27 183 /* Allow for some really big holes */
adeca641bcb64f Abdiel Janulgue 2021-01-27 184 if (!size)
adeca641bcb64f Abdiel Janulgue 2021-01-27 185 continue;
adeca641bcb64f Abdiel Janulgue 2021-01-27 186
adeca641bcb64f Abdiel Janulgue 2021-01-27 187 size = round_up(size, PAGE_SIZE);
adeca641bcb64f Abdiel Janulgue 2021-01-27 188 offset = igt_random_offset(&prng, 0, chunk_size, size,
adeca641bcb64f Abdiel Janulgue 2021-01-27 189 PAGE_SIZE);
adeca641bcb64f Abdiel Janulgue 2021-01-27 190
adeca641bcb64f Abdiel Janulgue 2021-01-27 191 err = intel_memory_region_reserve(mem, start + offset, size);
adeca641bcb64f Abdiel Janulgue 2021-01-27 192 if (err) {
adeca641bcb64f Abdiel Janulgue 2021-01-27 193 pr_err("%s failed to reserve range", __func__);
adeca641bcb64f Abdiel Janulgue 2021-01-27 194 goto out_close;
adeca641bcb64f Abdiel Janulgue 2021-01-27 195 }
adeca641bcb64f Abdiel Janulgue 2021-01-27 196
adeca641bcb64f Abdiel Janulgue 2021-01-27 197 /* XXX: maybe sanity check the block range here? */
adeca641bcb64f Abdiel Janulgue 2021-01-27 198 avail -= size;
adeca641bcb64f Abdiel Janulgue 2021-01-27 199 }
adeca641bcb64f Abdiel Janulgue 2021-01-27 200
adeca641bcb64f Abdiel Janulgue 2021-01-27 201 /* Try to see if we can allocate from the remaining space */
adeca641bcb64f Abdiel Janulgue 2021-01-27 202 allocated = 0;
adeca641bcb64f Abdiel Janulgue 2021-01-27 203 cur_avail = avail;
adeca641bcb64f Abdiel Janulgue 2021-01-27 204 do {
adeca641bcb64f Abdiel Janulgue 2021-01-27 205 u32 size = i915_prandom_u32_max_state(cur_avail, &prng);
adeca641bcb64f Abdiel Janulgue 2021-01-27 206
adeca641bcb64f Abdiel Janulgue 2021-01-27 207 size = max_t(u32, round_up(size, PAGE_SIZE), PAGE_SIZE);
adeca641bcb64f Abdiel Janulgue 2021-01-27 208 obj = igt_object_create(mem, &objects, size, 0);
adeca641bcb64f Abdiel Janulgue 2021-01-27 209 if (IS_ERR(obj)) {
d53ec322dc7de3 Matthew Auld 2021-06-16 210 if (PTR_ERR(obj) == -ENXIO)
adeca641bcb64f Abdiel Janulgue 2021-01-27 211 break;
d53ec322dc7de3 Matthew Auld 2021-06-16 212
adeca641bcb64f Abdiel Janulgue 2021-01-27 213 err = PTR_ERR(obj);
adeca641bcb64f Abdiel Janulgue 2021-01-27 214 goto out_close;
adeca641bcb64f Abdiel Janulgue 2021-01-27 215 }
adeca641bcb64f Abdiel Janulgue 2021-01-27 216 cur_avail -= size;
adeca641bcb64f Abdiel Janulgue 2021-01-27 217 allocated += size;
adeca641bcb64f Abdiel Janulgue 2021-01-27 218 } while (1);
adeca641bcb64f Abdiel Janulgue 2021-01-27 219
adeca641bcb64f Abdiel Janulgue 2021-01-27 220 if (allocated != avail) {
adeca641bcb64f Abdiel Janulgue 2021-01-27 221 pr_err("%s mismatch between allocation and free space", __func__);
adeca641bcb64f Abdiel Janulgue 2021-01-27 222 err = -EINVAL;
adeca641bcb64f Abdiel Janulgue 2021-01-27 223 }
adeca641bcb64f Abdiel Janulgue 2021-01-27 224
adeca641bcb64f Abdiel Janulgue 2021-01-27 225 out_close:
adeca641bcb64f Abdiel Janulgue 2021-01-27 226 kfree(order);
adeca641bcb64f Abdiel Janulgue 2021-01-27 @227 close_objects(mem, &objects);
^^^
Dereferenced inside function.
d53ec322dc7de3 Matthew Auld 2021-06-16 228 intel_memory_region_put(mem);
adeca641bcb64f Abdiel Janulgue 2021-01-27 229 return err;
adeca641bcb64f Abdiel Janulgue 2021-01-27 230 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
More information about the Intel-gfx
mailing list