Message ID | 20240405202625.2525671-1-jani.nikula@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915: use check_add_overflow() and drop local variants | expand |
On Fri, Apr 05, 2024 at 11:26:25PM +0300, Jani Nikula wrote: > Prefer common check_add_overflow() from overflow.h over the locally > rolled versions of it. While check_add_overflow() does require a > variable to assign to, unlike add_overflows_t(), it's still better than > having multiple versions around. > > Cc: Kees Cook <keescook@chromium.org> > Signed-off-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> > --- > drivers/gpu/drm/i915/display/intel_fb.c | 6 +++--- > drivers/gpu/drm/i915/i915_utils.h | 14 -------------- > 2 files changed, 3 insertions(+), 17 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c > index 3ea6470d6d92..86b443433e8b 100644 > --- a/drivers/gpu/drm/i915/display/intel_fb.c > +++ b/drivers/gpu/drm/i915/display/intel_fb.c > @@ -1106,7 +1106,7 @@ static int intel_fb_offset_to_xy(int *x, int *y, > { > struct drm_i915_private *i915 = to_i915(fb->dev); > unsigned int height; > - u32 alignment; > + u32 alignment, unused; > > if (DISPLAY_VER(i915) >= 12 && > !intel_fb_needs_pot_stride_remap(to_intel_framebuffer(fb)) && > @@ -1128,8 +1128,8 @@ static int intel_fb_offset_to_xy(int *x, int *y, > height = ALIGN(height, intel_tile_height(fb, color_plane)); > > /* Catch potential overflows early */ > - if (add_overflows_t(u32, mul_u32_u32(height, fb->pitches[color_plane]), > - fb->offsets[color_plane])) { > + if (check_add_overflow(mul_u32_u32(height, fb->pitches[color_plane]), > + fb->offsets[color_plane], &unused)) { > drm_dbg_kms(&i915->drm, > "Bad offset 0x%08x or pitch %d for color plane %d\n", > fb->offsets[color_plane], fb->pitches[color_plane], > diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h > index b45ef0560611..06ec6ceb61d5 100644 > --- a/drivers/gpu/drm/i915/i915_utils.h > +++ b/drivers/gpu/drm/i915/i915_utils.h > @@ -73,20 +73,6 @@ bool i915_error_injected(void); > __i915_printk(i915, i915_error_injected() ? KERN_DEBUG : KERN_ERR, \ > fmt, ##__VA_ARGS__) > > -#if defined(GCC_VERSION) && GCC_VERSION >= 70000 > -#define add_overflows_t(T, A, B) \ > - __builtin_add_overflow_p((A), (B), (T)0) > -#else > -#define add_overflows_t(T, A, B) ({ \ > - typeof(A) a = (A); \ > - typeof(B) b = (B); \ > - (T)(a + b) < a; \ > -}) > -#endif > - > -#define add_overflows(A, B) \ > - add_overflows_t(typeof((A) + (B)), (A), (B)) > - > #define range_overflows(start, size, max) ({ \ > typeof(start) start__ = (start); \ > typeof(size) size__ = (size); \ > -- > 2.39.2 >
On Mon, 08 Apr 2024, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote: > On Fri, Apr 05, 2024 at 11:26:25PM +0300, Jani Nikula wrote: >> Prefer common check_add_overflow() from overflow.h over the locally >> rolled versions of it. While check_add_overflow() does require a >> variable to assign to, unlike add_overflows_t(), it's still better than >> having multiple versions around. >> >> Cc: Kees Cook <keescook@chromium.org> >> Signed-off-by: Jani Nikula <jani.nikula@intel.com> > > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Thanks, pushed to drm-intel-next. BR, Jani.
diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c index 3ea6470d6d92..86b443433e8b 100644 --- a/drivers/gpu/drm/i915/display/intel_fb.c +++ b/drivers/gpu/drm/i915/display/intel_fb.c @@ -1106,7 +1106,7 @@ static int intel_fb_offset_to_xy(int *x, int *y, { struct drm_i915_private *i915 = to_i915(fb->dev); unsigned int height; - u32 alignment; + u32 alignment, unused; if (DISPLAY_VER(i915) >= 12 && !intel_fb_needs_pot_stride_remap(to_intel_framebuffer(fb)) && @@ -1128,8 +1128,8 @@ static int intel_fb_offset_to_xy(int *x, int *y, height = ALIGN(height, intel_tile_height(fb, color_plane)); /* Catch potential overflows early */ - if (add_overflows_t(u32, mul_u32_u32(height, fb->pitches[color_plane]), - fb->offsets[color_plane])) { + if (check_add_overflow(mul_u32_u32(height, fb->pitches[color_plane]), + fb->offsets[color_plane], &unused)) { drm_dbg_kms(&i915->drm, "Bad offset 0x%08x or pitch %d for color plane %d\n", fb->offsets[color_plane], fb->pitches[color_plane], diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h index b45ef0560611..06ec6ceb61d5 100644 --- a/drivers/gpu/drm/i915/i915_utils.h +++ b/drivers/gpu/drm/i915/i915_utils.h @@ -73,20 +73,6 @@ bool i915_error_injected(void); __i915_printk(i915, i915_error_injected() ? KERN_DEBUG : KERN_ERR, \ fmt, ##__VA_ARGS__) -#if defined(GCC_VERSION) && GCC_VERSION >= 70000 -#define add_overflows_t(T, A, B) \ - __builtin_add_overflow_p((A), (B), (T)0) -#else -#define add_overflows_t(T, A, B) ({ \ - typeof(A) a = (A); \ - typeof(B) b = (B); \ - (T)(a + b) < a; \ -}) -#endif - -#define add_overflows(A, B) \ - add_overflows_t(typeof((A) + (B)), (A), (B)) - #define range_overflows(start, size, max) ({ \ typeof(start) start__ = (start); \ typeof(size) size__ = (size); \
Prefer common check_add_overflow() from overflow.h over the locally rolled versions of it. While check_add_overflow() does require a variable to assign to, unlike add_overflows_t(), it's still better than having multiple versions around. Cc: Kees Cook <keescook@chromium.org> Signed-off-by: Jani Nikula <jani.nikula@intel.com> --- drivers/gpu/drm/i915/display/intel_fb.c | 6 +++--- drivers/gpu/drm/i915/i915_utils.h | 14 -------------- 2 files changed, 3 insertions(+), 17 deletions(-)