Message ID | 20221228192252.917299-1-gwan-gyeong.mun@intel.com (mailing list archive) |
---|---|
Headers | show |
Series | Fixes integer overflow or integer truncation issues in page lookups, ttm place configuration and scatterlist creation | expand |
On 12/28/22 9:51 PM, Patchwork wrote: > == Series Details == > > Series: Fixes integer overflow or integer truncation issues in page lookups, ttm place configuration and scatterlist creation > URL : https://patchwork.freedesktop.org/series/112279/ > State : warning > > == Summary == > > Error: dim checkpatch failed > 580bc7c6ee10 drm/i915/gem: Typecheck page lookups > -:56: WARNING:DEPRECATED_API: Deprecated use of 'kmap_atomic', prefer 'kmap_local_page' instead > #56: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.c:434: > + src_map = kmap_atomic(i915_gem_object_get_page(obj, idx)); The kmap_atomic() used in this patch series is not a new addition, but the input argument used in the existing kmap_atomic() call is replaced with a local variable. Therefore, I suggest the discussion of replacing kmap_atomic() with kmap_local_page() should be considered in a separate patch. Unlike kmap_local_page(), kmap_atomic() is accompanied by additional operations (preempt_disable, pagefault_disable). Therefore, it is necessary to separately review whether there is a side effect by changing kmap_atomic() to kmap_local_page(). (Note. In the current implementation on i915, only kmap_atomic() is used (used in 13 places) and kmap_local_page() is not used.) [include/linux/highmem-internal.h] static inline void *kmap_atomic(struct page *page) { if (IS_ENABLED(CONFIG_PREEMPT_RT)) migrate_disable(); else preempt_disable(); pagefault_disable(); return page_address(page); } ... static inline void *kmap_local_page(struct page *page) { return page_address(page); } > > -:76: WARNING:AVOID_BUG: Do not crash the kernel unless it is absolutely unavoidable--use WARN_ON_ONCE() plus recovery code (if feasible) instead of BUG() or variants > #76: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.c:489: > + GEM_BUG_ON(overflows_type(offset >> PAGE_SHIFT, pgoff_t)); GEM_BUG_ON() used in this patch series is not a new addition, but the macro of the argument used for input has been changed from the previously used GEM_BUG_ON(). Changing GEM_BUG_ON() to a recoverable code should be considered in a separate patch. Br, G.G. > > -:150: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? > #150: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:413: > +#define i915_gem_object_page_iter_get_sg(obj, it, n, offset) ({ \ > + static_assert(castable_to_type(n, pgoff_t)); \ > + __i915_gem_object_page_iter_get_sg(obj, it, n, offset); \ > +}) > > -:199: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? > #199: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:458: > +#define i915_gem_object_get_sg(obj, n, offset) ({ \ > + static_assert(castable_to_type(n, pgoff_t)); \ > + __i915_gem_object_get_sg(obj, n, offset); \ > +}) > > -:248: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? > #248: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:503: > +#define i915_gem_object_get_sg_dma(obj, n, offset) ({ \ > + static_assert(castable_to_type(n, pgoff_t)); \ > + __i915_gem_object_get_sg_dma(obj, n, offset); \ > +}) > > -:286: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? > #286: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:539: > +#define i915_gem_object_get_page(obj, n) ({ \ > + static_assert(castable_to_type(n, pgoff_t)); \ > + __i915_gem_object_get_page(obj, n); \ > +}) > > -:323: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? > #323: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:574: > +#define i915_gem_object_get_dirty_page(obj, n) ({ \ > + static_assert(castable_to_type(n, pgoff_t)); \ > + __i915_gem_object_get_dirty_page(obj, n); \ > +}) > > -:364: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? > #364: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:612: > +#define i915_gem_object_get_dma_address_len(obj, n, len) ({ \ > + static_assert(castable_to_type(n, pgoff_t)); \ > + __i915_gem_object_get_dma_address_len(obj, n, len); \ > +}) > > -:401: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? > #401: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:647: > +#define i915_gem_object_get_dma_address(obj, n) ({ \ > + static_assert(castable_to_type(n, pgoff_t)); \ > + __i915_gem_object_get_dma_address(obj, n); \ > +}) > > total: 0 errors, 2 warnings, 7 checks, 616 lines checked > 383085856287 drm/i915: Check for integer truncation on scatterlist creation > 60d38f11dfc7 drm/i915: Check for integer truncation on the configuration of ttm place > c51e58da471c drm/i915: Check if the size is too big while creating shmem file > 96ee63399a5e drm/i915: Use error code as -E2BIG when the size of gem ttm object is too large > 2402a45e5aac drm/i915: Remove truncation warning for large objects > >
On Wed, Dec 28, 2022 at 09:22:46PM +0200, Gwan-gyeong Mun wrote: > This patch series fixes integer overflow or integer truncation issues in > page lookups, ttm place configuration and scatterlist creation, etc. > We need to check that we avoid integer overflows when looking up a page, > and so fix all the instances where we have mistakenly used a plain integer > instead of a more suitable long. > And there is an impedance mismatch between the scatterlist API using > unsigned int and our memory/page accounting in unsigned long. That is we > may try to create a scatterlist for a large object that overflows returning > a small table into which we try to fit very many pages. As the object size > is under the control of userspace, we have to be prudent and catch the > conversion errors. To catch the implicit truncation as we switch from > unsigned long into the scatterlist's unsigned int, we use improved > overflows_type check and report E2BIG prior to the operation. This is > already used in our create ioctls to indicate if the uABI request is simply > too large for the backing store. > And ttm place also has the same problem with scatterlist creation, > and we fix the integer truncation problem with the way approached by > scatterlist creation. > And It corrects the error code to return -E2BIG when creating gem objects > using ttm or shmem, if the size is too large in each case. > > Compared to the v15 version patch series[1], there is no code modification in > this version patch series. Among the warnings reported by CI.CHECKPATCH, > this patch fixes the parts that need fixing. > Fix "ERROR:SPACING" Checkpatch report > Fix "WARNING:COMMIT_LOG_LONG_LINE" Checkpatch report > > [1] https://patchwork.freedesktop.org/series/112270/ I have backmerged the drm-next to drm-intel-gt-next and pushed this series. Thanks for the patches and reviews. > > Chris Wilson (3): > drm/i915/gem: Typecheck page lookups > drm/i915: Check for integer truncation on scatterlist creation > drm/i915: Remove truncation warning for large objects > > Gwan-gyeong Mun (3): > drm/i915: Check for integer truncation on the configuration of ttm > place > drm/i915: Check if the size is too big while creating shmem file > drm/i915: Use error code as -E2BIG when the size of gem ttm object is > too large > > drivers/gpu/drm/i915/gem/i915_gem_internal.c | 7 +- > drivers/gpu/drm/i915/gem/i915_gem_object.c | 7 +- > drivers/gpu/drm/i915/gem/i915_gem_object.h | 303 +++++++++++++++--- > drivers/gpu/drm/i915/gem/i915_gem_pages.c | 27 +- > drivers/gpu/drm/i915/gem/i915_gem_phys.c | 4 + > drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 23 +- > drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 20 +- > drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 6 +- > .../drm/i915/gem/selftests/huge_gem_object.c | 6 +- > .../gpu/drm/i915/gem/selftests/huge_pages.c | 8 + > .../drm/i915/gem/selftests/i915_gem_context.c | 12 +- > .../drm/i915/gem/selftests/i915_gem_mman.c | 8 +- > .../drm/i915/gem/selftests/i915_gem_object.c | 8 +- > drivers/gpu/drm/i915/gvt/dmabuf.c | 10 +- > drivers/gpu/drm/i915/i915_gem.c | 18 +- > drivers/gpu/drm/i915/i915_scatterlist.c | 9 + > drivers/gpu/drm/i915/i915_vma.c | 8 +- > drivers/gpu/drm/i915/intel_region_ttm.c | 14 + > drivers/gpu/drm/i915/selftests/i915_gem_gtt.c | 4 + > drivers/gpu/drm/i915/selftests/scatterlist.c | 4 + > 20 files changed, 420 insertions(+), 86 deletions(-) > > -- > 2.37.1 >