From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 52E5B446BF5 for ; Wed, 29 Jul 2026 09:48:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.9 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785318535; cv=none; b=fjGyE/wAeOpxvI5yUyrfT5s2kUIcIDqRE1Oat2SCDzNbo6TWlXi3/dqXusTkU/pjvxArDge2oGV/+nDO9BhW9MH/uq+5UrD/E7r7+jfeaoUsCDN/xbdEqC1Cw68SI/r5X6tcQmmH8LcnEQpGP5GKMUR3eNhiGw1FXCadXQvcJxM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785318535; c=relaxed/simple; bh=y29Bx/MHebd8jws4ZYOHkDcArLrG/zbSpIS25YdoY2o=; h=From:To:Cc:Subject:In-Reply-To:References:Date:Message-ID: MIME-Version:Content-Type; b=laR9CMX9QA+MfHpn7CVZ4uK9Kg8drgonUhkqMTvTJ+nXlGKYg/q+QLjfsWnSD5bMf6jpnzf2qvMsRGxd25GPUHgipwL9ejt+8J036/N7JAZbOBoKpBQH4CN9m2e6imu3JwiuxCthszsK4xTuVMvsI2vVph1DKufiRehrvmlbQKA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=eHy6722s; arc=none smtp.client-ip=192.198.163.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="eHy6722s" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1785318533; x=1816854533; h=from:to:cc:subject:in-reply-to:references:date: message-id:mime-version; bh=y29Bx/MHebd8jws4ZYOHkDcArLrG/zbSpIS25YdoY2o=; b=eHy6722scp08RFCjm/CtMVOBVzQpl98ZA7GcNjmcDm20mj3ZNyak+QzJ m0hG/xc07PkaGxKeT+3xeT3n8vUnrBjUgj+W3xQ6cPpeSCfKXigRM4zmD yH2vma2WNAPHNNSrRWbtt8J1YihVLmWj+F9bIQZAhPVD3ekocQNM+sZiM HHhMp4VDwHQjUTEbmK5jB6Biwq27QMx7lRPp1cgmWKA5XzcxA/CxcMRjk nOovUPBvjMjqsdVJADzMGBlMN4+MJZOafqtpSQWznvD69SJ2VtBPQR+RP vF8U1u8WrDtSKR3xhrfJLNm9DZv4WJsZn7ZryTHmglTzi6SJCSTg2BfhK A==; X-CSE-ConnectionGUID: 59Rmm15wTJe6mFFS/ce2EQ== X-CSE-MsgGUID: 8DqtdXxNTZKDS5wLTw77Cg== X-IronPort-AV: E=McAfee;i="6800,10657,11859"; a="96579489" X-IronPort-AV: E=Sophos;i="6.25,192,1779174000"; d="scan'208";a="96579489" Received: from fmviesa007.fm.intel.com ([10.60.135.147]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Jul 2026 02:48:53 -0700 X-CSE-ConnectionGUID: 0tBppqU6TMyFA/pBLjMZew== X-CSE-MsgGUID: N2AxdOvDTuaeD54bz8ki3Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.25,192,1779174000"; d="scan'208";a="256629828" Received: from slindbla-desk.ger.corp.intel.com (HELO localhost) ([10.245.244.212]) by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Jul 2026 02:48:50 -0700 From: Jani Nikula To: oushixiong1025@163.com, Jocelyn Falempe Cc: Javier Martinez Canillas , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Shixiong Ou Subject: Re: [PATCH 2/4] drm/log: Fix division by zero when scale module parameter is 0 In-Reply-To: <20260729084520.688087-2-oushixiong1025@163.com> Organization: Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs Bertel Jungin Aukio 5, 02600 Espoo, Finland References: <20260729084520.688087-1-oushixiong1025@163.com> <20260729084520.688087-2-oushixiong1025@163.com> Date: Wed, 29 Jul 2026 12:48:47 +0300 Message-ID: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain On Wed, 29 Jul 2026, oushixiong1025@163.com wrote: > From: Shixiong Ou > > The scale module parameter can be set to 0 via kernel command line or > sysfs. When scale is 0, scaled_font_h and scaled_font_w become 0, > causing a division by zero in the rows/columns calculation. > > Add a custom param_ops setter to clamp scale to a minimum of 1 at the > source, ensuring scale is always valid for all users. > > Signed-off-by: Shixiong Ou > --- > drivers/gpu/drm/clients/drm_log.c | 22 +++++++++++++++++++++- > 1 file changed, 21 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/clients/drm_log.c b/drivers/gpu/drm/clients/drm_log.c > index 294b3be1a6b3..a04f651e8265 100644 > --- a/drivers/gpu/drm/clients/drm_log.c > +++ b/drivers/gpu/drm/clients/drm_log.c > @@ -26,7 +26,27 @@ MODULE_DESCRIPTION("DRM boot logger"); > MODULE_LICENSE("GPL"); > > static unsigned int scale = 1; > -module_param(scale, uint, 0444); > + > +static int drm_log_scale_set(const char *val, const struct kernel_param *kp) > +{ > + int ret; > + > + ret = param_set_uint(val, kp); > + if (ret) > + return ret; Pedantically, scale may be 0 between param_set_uint() and the check below, i.e. the fix is racy. An alternative is to use a function to get the scaling factor, and having it return scale ?: 1. BR, Jani. > + > + if (scale < 1) > + scale = 1; > + > + return 0; > +} > + > +static const struct kernel_param_ops drm_log_scale_ops = { > + .set = drm_log_scale_set, > + .get = param_get_uint, > +}; > + > +module_param_cb(scale, &drm_log_scale_ops, &scale, 0444); > MODULE_PARM_DESC(scale, "Integer scaling factor for drm_log, default is 1"); > > /** -- Jani Nikula, Intel