* Re: [PATCH v2 3/5] mtd: always initialize 'stats' in struct mtd_oob_ops
@ 2022-01-03 9:13 kernel test robot
0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2022-01-03 9:13 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 24481 bytes --]
CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
In-Reply-To: <20211216083418.13512-4-kernel@kempniu.pl>
References: <20211216083418.13512-4-kernel@kempniu.pl>
TO: "Michał Kępień" <kernel@kempniu.pl>
TO: Miquel Raynal <miquel.raynal@bootlin.com>
TO: Richard Weinberger <richard@nod.at>
TO: Vignesh Raghavendra <vigneshr@ti.com>
CC: Boris Brezillon <bbrezillon@kernel.org>
CC: linux-mtd(a)lists.infradead.org
CC: linux-kernel(a)vger.kernel.org
Hi "Michał,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on mtd/mtd/next]
[also build test WARNING on mtd/mtd/fixes v5.16-rc8]
[cannot apply to mtd/nand/next next-20211224]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Micha-K-pie/mtdchar-add-MEMREAD-ioctl/20211216-163537
base: https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/next
:::::: branch date: 3 weeks ago
:::::: commit date: 3 weeks ago
config: x86_64-randconfig-c007-20211227 (https://download.01.org/0day-ci/archive/20220103/202201031718.RSuDGlkG-lkp(a)intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 511726c64d3b6cca66f7c54d457d586aa3129f67)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/f409cccc4e5bfd85e277267870c49d05ba50e4a5
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Micha-K-pie/mtdchar-add-MEMREAD-ioctl/20211216-163537
git checkout f409cccc4e5bfd85e277267870c49d05ba50e4a5
# save the config file to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 clang-analyzer
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
clang-analyzer warnings: (new ones prefixed by >>)
^
drivers/hwmon/adc128d818.c:217:11: note: '?' condition is false
regval = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -128, 127);
^
include/linux/minmax.h:137:32: note: expanded from macro 'clamp_val'
#define clamp_val(val, lo, hi) clamp_t(typeof(val), val, lo, hi)
^
include/linux/minmax.h:124:48: note: expanded from macro 'clamp_t'
#define clamp_t(type, val, lo, hi) min_t(type, max_t(type, val, lo), hi)
^
include/linux/minmax.h:112:27: note: expanded from macro 'max_t'
#define max_t(type, x, y) __careful_cmp((type)(x), (type)(y), >)
^
include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
__cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
^
include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
__cmp(unique_x, unique_y, op); })
^
include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
#define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
^
drivers/hwmon/adc128d818.c:217:11: note: '__UNIQUE_ID___x601' is < '__UNIQUE_ID___y602'
regval = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -128, 127);
^
include/linux/minmax.h:137:32: note: expanded from macro 'clamp_val'
#define clamp_val(val, lo, hi) clamp_t(typeof(val), val, lo, hi)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/minmax.h:124:36: note: expanded from macro 'clamp_t'
#define clamp_t(type, val, lo, hi) min_t(type, max_t(type, val, lo), hi)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/minmax.h:104:27: note: expanded from macro 'min_t'
#define min_t(type, x, y) __careful_cmp((type)(x), (type)(y), <)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
__cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
__cmp(unique_x, unique_y, op); })
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
#define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
^~~
drivers/hwmon/adc128d818.c:217:11: note: '?' condition is true
regval = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -128, 127);
^
include/linux/minmax.h:137:32: note: expanded from macro 'clamp_val'
#define clamp_val(val, lo, hi) clamp_t(typeof(val), val, lo, hi)
^
include/linux/minmax.h:124:36: note: expanded from macro 'clamp_t'
#define clamp_t(type, val, lo, hi) min_t(type, max_t(type, val, lo), hi)
^
include/linux/minmax.h:104:27: note: expanded from macro 'min_t'
#define min_t(type, x, y) __careful_cmp((type)(x), (type)(y), <)
^
include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
__cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
^
include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
__cmp(unique_x, unique_y, op); })
^
include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
#define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
^
drivers/hwmon/adc128d818.c:217:2: note: The value -128 is assigned to 'regval'
regval = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -128, 127);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/hwmon/adc128d818.c:218:29: note: The result of the left shift is undefined because the left operand is negative
data->temp[index] = regval << 1;
~~~~~~ ^
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
4 warnings generated.
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
drivers/mtd/devices/phram.c:231:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
strcpy(str, val);
^~~~~~
drivers/mtd/devices/phram.c:231:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119
strcpy(str, val);
^~~~~~
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
4 warnings generated.
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
7 warnings generated.
drivers/mtd/devices/block2mtd.c:402:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
strcpy(str, val);
^~~~~~
drivers/mtd/devices/block2mtd.c:402:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119
strcpy(str, val);
^~~~~~
Suppressed 6 warnings (6 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
>> drivers/mtd/nand/onenand/onenand_base.c:3083:8: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign]
buf += tmp_retlen;
^
drivers/mtd/nand/onenand/onenand_base.c:3156:9: note: Calling 'onenand_otp_walk'
return onenand_otp_walk(mtd, from, len, retlen, buf, do_otp_read, MTD_OTP_USER);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/mtd/nand/onenand/onenand_base.c:3038:6: note: Assuming 'density' is >= ONENAND_DEVICE_DENSITY_512Mb
if (density < ONENAND_DEVICE_DENSITY_512Mb)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/mtd/nand/onenand/onenand_base.c:3038:2: note: Taking false branch
if (density < ONENAND_DEVICE_DENSITY_512Mb)
^
drivers/mtd/nand/onenand/onenand_base.c:3043:6: note: 'mode' is not equal to MTD_OTP_FACTORY
if (mode == MTD_OTP_FACTORY) {
^~~~
drivers/mtd/nand/onenand/onenand_base.c:3043:2: note: Taking false branch
if (mode == MTD_OTP_FACTORY) {
^
drivers/mtd/nand/onenand/onenand_base.c:3049:6: note: 'mode' is equal to MTD_OTP_USER
if (mode == MTD_OTP_USER) {
^~~~
drivers/mtd/nand/onenand/onenand_base.c:3049:2: note: Taking true branch
if (mode == MTD_OTP_USER) {
^
drivers/mtd/nand/onenand/onenand_base.c:3050:7: note: Assuming the condition is false
if (mtd->writesize * otp_pages < from + len)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/mtd/nand/onenand/onenand_base.c:3050:3: note: Taking false branch
if (mtd->writesize * otp_pages < from + len)
^
drivers/mtd/nand/onenand/onenand_base.c:3058:9: note: Assuming 'len' is > 0
while (len > 0 && otp_pages > 0) {
^~~~~~~
drivers/mtd/nand/onenand/onenand_base.c:3058:9: note: Left side of '&&' is true
drivers/mtd/nand/onenand/onenand_base.c:3058:2: note: Loop condition is true. Entering loop body
while (len > 0 && otp_pages > 0) {
^
drivers/mtd/nand/onenand/onenand_base.c:3059:8: note: 'action' is non-null
if (!action) { /* OTP Info functions */
^~~~~~
drivers/mtd/nand/onenand/onenand_base.c:3059:3: note: Taking false branch
if (!action) { /* OTP Info functions */
^
drivers/mtd/nand/onenand/onenand_base.c:3077:4: note: 'tmp_retlen' declared without an initial value
size_t tmp_retlen;
^~~~~~~~~~~~~~~~~
drivers/mtd/nand/onenand/onenand_base.c:3079:10: note: Calling 'do_otp_read'
ret = action(mtd, from, len, &tmp_retlen, buf);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/mtd/nand/onenand/onenand_base.c:2911:28: note: Assuming the condition is true
ret = ONENAND_IS_4KB_PAGE(this) ?
^
include/linux/mtd/onenand.h:206:3: note: expanded from macro 'ONENAND_IS_4KB_PAGE'
(this->options & ONENAND_HAS_4KB_PAGE)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/mtd/nand/onenand/onenand_base.c:2911:8: note: '?' condition is true
ret = ONENAND_IS_4KB_PAGE(this) ?
^
include/linux/mtd/onenand.h:206:2: note: expanded from macro 'ONENAND_IS_4KB_PAGE'
(this->options & ONENAND_HAS_4KB_PAGE)
^
drivers/mtd/nand/onenand/onenand_base.c:2912:3: note: Calling 'onenand_mlc_read_ops_nolock'
onenand_mlc_read_ops_nolock(mtd, from, &ops) :
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/mtd/nand/onenand/onenand_base.c:1128:2: note: Taking false branch
pr_debug("%s: from = 0x%08x, len = %i\n", __func__, (unsigned int)from,
^
include/linux/printk.h:576:2: note: expanded from macro 'pr_debug'
no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
^
include/linux/printk.h:131:2: note: expanded from macro 'no_printk'
if (0) \
^
drivers/mtd/nand/onenand/onenand_base.c:1135:6: note: Assuming the condition is false
if (from + len > mtd->size) {
^~~~~~~~~~~~~~~~~~~~~~
drivers/mtd/nand/onenand/onenand_base.c:1135:2: note: Taking false branch
if (from + len > mtd->size) {
^
drivers/mtd/nand/onenand/onenand_base.c:1145:9: note: 'read' is < 'len'
while (read < len) {
^~~~
drivers/mtd/nand/onenand/onenand_base.c:1145:2: note: Loop condition is true. Entering loop body
while (read < len) {
^
drivers/mtd/nand/onenand/onenand_base.c:1148:13: note: Assuming '__UNIQUE_ID___x410' is >= '__UNIQUE_ID___y411'
thislen = min_t(int, writesize, len - read);
^
include/linux/minmax.h:104:27: note: expanded from macro 'min_t'
#define min_t(type, x, y) __careful_cmp((type)(x), (type)(y), <)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
__cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
__cmp(unique_x, unique_y, op); })
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
#define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
^~~~~~~~~~
drivers/mtd/nand/onenand/onenand_base.c:1148:13: note: '?' condition is false
vim +3083 drivers/mtd/nand/onenand/onenand_base.c
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3013
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3014 /**
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3015 * onenand_otp_walk - [DEFAULT] Handle OTP operation
720ae74ddf0aa4 drivers/mtd/nand/onenand/onenand_base.c Lee Jones 2020-11-09 3016 * @mtd: MTD device structure
720ae74ddf0aa4 drivers/mtd/nand/onenand/onenand_base.c Lee Jones 2020-11-09 3017 * @from: The offset to read/write
720ae74ddf0aa4 drivers/mtd/nand/onenand/onenand_base.c Lee Jones 2020-11-09 3018 * @len: number of bytes to read/write
720ae74ddf0aa4 drivers/mtd/nand/onenand/onenand_base.c Lee Jones 2020-11-09 3019 * @retlen: pointer to variable to store the number of read bytes
720ae74ddf0aa4 drivers/mtd/nand/onenand/onenand_base.c Lee Jones 2020-11-09 3020 * @buf: the databuffer to put/get data
720ae74ddf0aa4 drivers/mtd/nand/onenand/onenand_base.c Lee Jones 2020-11-09 3021 * @action: do given action
720ae74ddf0aa4 drivers/mtd/nand/onenand/onenand_base.c Lee Jones 2020-11-09 3022 * @mode: specify user and factory
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3023 *
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3024 * Handle OTP operation.
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3025 */
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3026 static int onenand_otp_walk(struct mtd_info *mtd, loff_t from, size_t len,
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3027 size_t *retlen, u_char *buf,
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3028 otp_op_t action, int mode)
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3029 {
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3030 struct onenand_chip *this = mtd->priv;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3031 int otp_pages;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3032 int density;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3033 int ret = 0;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3034
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3035 *retlen = 0;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3036
e71f04fc9234b1 drivers/mtd/onenand/onenand_base.c Kyungmin Park 2007-12-11 3037 density = onenand_get_density(this->device_id);
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3038 if (density < ONENAND_DEVICE_DENSITY_512Mb)
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3039 otp_pages = 20;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3040 else
3cf602532c535e drivers/mtd/onenand/onenand_base.c Amul Kumar Saha 2009-10-21 3041 otp_pages = 50;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3042
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3043 if (mode == MTD_OTP_FACTORY) {
28318776a80bc3 drivers/mtd/onenand/onenand_base.c Joern Engel 2006-05-22 3044 from += mtd->writesize * otp_pages;
3cf602532c535e drivers/mtd/onenand/onenand_base.c Amul Kumar Saha 2009-10-21 3045 otp_pages = ONENAND_PAGES_PER_BLOCK - otp_pages;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3046 }
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3047
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3048 /* Check User/Factory boundary */
3cf602532c535e drivers/mtd/onenand/onenand_base.c Amul Kumar Saha 2009-10-21 3049 if (mode == MTD_OTP_USER) {
0a032a4df6dc4a drivers/mtd/onenand/onenand_base.c Roel Kluin 2009-12-16 3050 if (mtd->writesize * otp_pages < from + len)
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3051 return 0;
3cf602532c535e drivers/mtd/onenand/onenand_base.c Amul Kumar Saha 2009-10-21 3052 } else {
0a032a4df6dc4a drivers/mtd/onenand/onenand_base.c Roel Kluin 2009-12-16 3053 if (mtd->writesize * otp_pages < len)
3cf602532c535e drivers/mtd/onenand/onenand_base.c Amul Kumar Saha 2009-10-21 3054 return 0;
3cf602532c535e drivers/mtd/onenand/onenand_base.c Amul Kumar Saha 2009-10-21 3055 }
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3056
49dc08eeda707f drivers/mtd/onenand/onenand_base.c Artem Bityutskiy 2007-09-21 3057 onenand_get_device(mtd, FL_OTPING);
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3058 while (len > 0 && otp_pages > 0) {
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3059 if (!action) { /* OTP Info functions */
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3060 struct otp_info *otpinfo;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3061
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3062 len -= sizeof(struct otp_info);
49dc08eeda707f drivers/mtd/onenand/onenand_base.c Artem Bityutskiy 2007-09-21 3063 if (len <= 0) {
49dc08eeda707f drivers/mtd/onenand/onenand_base.c Artem Bityutskiy 2007-09-21 3064 ret = -ENOSPC;
49dc08eeda707f drivers/mtd/onenand/onenand_base.c Artem Bityutskiy 2007-09-21 3065 break;
49dc08eeda707f drivers/mtd/onenand/onenand_base.c Artem Bityutskiy 2007-09-21 3066 }
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3067
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3068 otpinfo = (struct otp_info *) buf;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3069 otpinfo->start = from;
28318776a80bc3 drivers/mtd/onenand/onenand_base.c Joern Engel 2006-05-22 3070 otpinfo->length = mtd->writesize;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3071 otpinfo->locked = 0;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3072
28318776a80bc3 drivers/mtd/onenand/onenand_base.c Joern Engel 2006-05-22 3073 from += mtd->writesize;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3074 buf += sizeof(struct otp_info);
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3075 *retlen += sizeof(struct otp_info);
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3076 } else {
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3077 size_t tmp_retlen;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3078
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3079 ret = action(mtd, from, len, &tmp_retlen, buf);
c3cb77f8980db9 drivers/mtd/onenand/onenand_base.c Dan Carpenter 2016-04-13 3080 if (ret)
c3cb77f8980db9 drivers/mtd/onenand/onenand_base.c Dan Carpenter 2016-04-13 3081 break;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3082
3cf602532c535e drivers/mtd/onenand/onenand_base.c Amul Kumar Saha 2009-10-21 @3083 buf += tmp_retlen;
3cf602532c535e drivers/mtd/onenand/onenand_base.c Amul Kumar Saha 2009-10-21 3084 len -= tmp_retlen;
3cf602532c535e drivers/mtd/onenand/onenand_base.c Amul Kumar Saha 2009-10-21 3085 *retlen += tmp_retlen;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3086
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3087 }
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3088 otp_pages--;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3089 }
49dc08eeda707f drivers/mtd/onenand/onenand_base.c Artem Bityutskiy 2007-09-21 3090 onenand_release_device(mtd);
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3091
49dc08eeda707f drivers/mtd/onenand/onenand_base.c Artem Bityutskiy 2007-09-21 3092 return ret;
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3093 }
493c646077ef0b drivers/mtd/onenand/onenand_base.c Kyungmin Park 2006-05-12 3094
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v2 3/5] mtd: always initialize 'stats' in struct mtd_oob_ops
2021-12-16 8:34 [PATCH v2 0/5] mtdchar: add MEMREAD ioctl Michał Kępień
@ 2021-12-16 8:34 ` Michał Kępień
0 siblings, 0 replies; 3+ messages in thread
From: Michał Kępień @ 2021-12-16 8:34 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra
Cc: Boris Brezillon, linux-mtd, linux-kernel
As the 'stats' field in struct mtd_oob_ops is used in conditional
expressions, ensure it is always zero-initialized in all such structures
to prevent random stack garbage from being interpreted as a pointer.
Strictly speaking, this problem currently only needs to be fixed for
struct mtd_oob_ops structures subsequently passed to mtd_read_oob().
However, this commit goes a step further and makes all instances of
struct mtd_oob_ops in the tree zero-initialized, in hope of preventing
future problems, e.g. if struct mtd_req_stats gets extended with write
statistics at some point.
Signed-off-by: Michał Kępień <kernel@kempniu.pl>
---
Obviously this objective can be achieved in various ways. I was aiming
for a minimal diff which does the job.
drivers/mtd/inftlcore.c | 6 +++---
drivers/mtd/mtdswap.c | 6 +++---
drivers/mtd/nand/onenand/onenand_base.c | 4 ++--
drivers/mtd/nand/onenand/onenand_bbt.c | 2 +-
drivers/mtd/nand/raw/nand_bbt.c | 8 ++++----
drivers/mtd/nand/raw/sm_common.c | 2 +-
drivers/mtd/nftlcore.c | 6 +++---
drivers/mtd/sm_ftl.c | 4 ++--
drivers/mtd/ssfdc.c | 2 +-
drivers/mtd/tests/nandbiterrs.c | 2 +-
drivers/mtd/tests/oobtest.c | 8 ++++----
drivers/mtd/tests/readtest.c | 2 +-
fs/jffs2/wbuf.c | 6 +++---
13 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/drivers/mtd/inftlcore.c b/drivers/mtd/inftlcore.c
index 6b48397c750c..58ca1c21ebe6 100644
--- a/drivers/mtd/inftlcore.c
+++ b/drivers/mtd/inftlcore.c
@@ -136,7 +136,7 @@ static void inftl_remove_dev(struct mtd_blktrans_dev *dev)
int inftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len,
size_t *retlen, uint8_t *buf)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res;
ops.mode = MTD_OPS_PLACE_OOB;
@@ -156,7 +156,7 @@ int inftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len,
int inftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len,
size_t *retlen, uint8_t *buf)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res;
ops.mode = MTD_OPS_PLACE_OOB;
@@ -176,7 +176,7 @@ int inftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len,
static int inftl_write(struct mtd_info *mtd, loff_t offs, size_t len,
size_t *retlen, uint8_t *buf, uint8_t *oob)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res;
ops.mode = MTD_OPS_PLACE_OOB;
diff --git a/drivers/mtd/mtdswap.c b/drivers/mtd/mtdswap.c
index e86b04bc1d6b..ce3796b929e7 100644
--- a/drivers/mtd/mtdswap.c
+++ b/drivers/mtd/mtdswap.c
@@ -323,7 +323,7 @@ static int mtdswap_read_markers(struct mtdswap_dev *d, struct swap_eb *eb)
struct mtdswap_oobdata *data, *data2;
int ret;
loff_t offset;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
offset = mtdswap_eb_offset(d, eb);
@@ -370,7 +370,7 @@ static int mtdswap_write_marker(struct mtdswap_dev *d, struct swap_eb *eb,
struct mtdswap_oobdata n;
int ret;
loff_t offset;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
ops.ooboffs = 0;
ops.oobbuf = (uint8_t *)&n;
@@ -878,7 +878,7 @@ static unsigned int mtdswap_eblk_passes(struct mtdswap_dev *d,
loff_t base, pos;
unsigned int *p1 = (unsigned int *)d->page_buf;
unsigned char *p2 = (unsigned char *)d->oob_buf;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int ret;
ops.mode = MTD_OPS_AUTO_OOB;
diff --git a/drivers/mtd/nand/onenand/onenand_base.c b/drivers/mtd/nand/onenand/onenand_base.c
index 958bac54b190..5810104420a2 100644
--- a/drivers/mtd/nand/onenand/onenand_base.c
+++ b/drivers/mtd/nand/onenand/onenand_base.c
@@ -2935,7 +2935,7 @@ static int do_otp_write(struct mtd_info *mtd, loff_t to, size_t len,
struct onenand_chip *this = mtd->priv;
unsigned char *pbuf = buf;
int ret;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
/* Force buffer page aligned */
if (len < mtd->writesize) {
@@ -2977,7 +2977,7 @@ static int do_otp_lock(struct mtd_info *mtd, loff_t from, size_t len,
size_t *retlen, u_char *buf)
{
struct onenand_chip *this = mtd->priv;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int ret;
if (FLEXONENAND(this)) {
diff --git a/drivers/mtd/nand/onenand/onenand_bbt.c b/drivers/mtd/nand/onenand/onenand_bbt.c
index def89f108007..c9d106d87ab3 100644
--- a/drivers/mtd/nand/onenand/onenand_bbt.c
+++ b/drivers/mtd/nand/onenand/onenand_bbt.c
@@ -61,7 +61,7 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr
int startblock;
loff_t from;
size_t readlen, ooblen;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int rgn;
printk(KERN_INFO "Scanning device for bad blocks\n");
diff --git a/drivers/mtd/nand/raw/nand_bbt.c b/drivers/mtd/nand/raw/nand_bbt.c
index ab630af3a309..817fff3584e3 100644
--- a/drivers/mtd/nand/raw/nand_bbt.c
+++ b/drivers/mtd/nand/raw/nand_bbt.c
@@ -313,7 +313,7 @@ static int scan_read_oob(struct nand_chip *this, uint8_t *buf, loff_t offs,
size_t len)
{
struct mtd_info *mtd = nand_to_mtd(this);
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res, ret = 0;
ops.mode = MTD_OPS_PLACE_OOB;
@@ -354,7 +354,7 @@ static int scan_write_bbt(struct nand_chip *this, loff_t offs, size_t len,
uint8_t *buf, uint8_t *oob)
{
struct mtd_info *mtd = nand_to_mtd(this);
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
ops.mode = MTD_OPS_PLACE_OOB;
ops.ooboffs = 0;
@@ -416,7 +416,7 @@ static int scan_block_fast(struct nand_chip *this, struct nand_bbt_descr *bd,
{
struct mtd_info *mtd = nand_to_mtd(this);
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int ret, page_offset;
ops.ooblen = mtd->oobsize;
@@ -756,7 +756,7 @@ static int write_bbt(struct nand_chip *this, uint8_t *buf,
uint8_t rcode = td->reserved_block_code;
size_t retlen, len = 0;
loff_t to;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
ops.ooblen = mtd->oobsize;
ops.ooboffs = 0;
diff --git a/drivers/mtd/nand/raw/sm_common.c b/drivers/mtd/nand/raw/sm_common.c
index ba24cb36d0b9..6df33e8d77df 100644
--- a/drivers/mtd/nand/raw/sm_common.c
+++ b/drivers/mtd/nand/raw/sm_common.c
@@ -99,7 +99,7 @@ static const struct mtd_ooblayout_ops oob_sm_small_ops = {
static int sm_block_markbad(struct nand_chip *chip, loff_t ofs)
{
struct mtd_info *mtd = nand_to_mtd(chip);
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
struct sm_oob oob;
int ret;
diff --git a/drivers/mtd/nftlcore.c b/drivers/mtd/nftlcore.c
index 913db0dd6a8d..64d319e959b2 100644
--- a/drivers/mtd/nftlcore.c
+++ b/drivers/mtd/nftlcore.c
@@ -124,7 +124,7 @@ int nftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len,
size_t *retlen, uint8_t *buf)
{
loff_t mask = mtd->writesize - 1;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res;
ops.mode = MTD_OPS_PLACE_OOB;
@@ -145,7 +145,7 @@ int nftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len,
size_t *retlen, uint8_t *buf)
{
loff_t mask = mtd->writesize - 1;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res;
ops.mode = MTD_OPS_PLACE_OOB;
@@ -168,7 +168,7 @@ static int nftl_write(struct mtd_info *mtd, loff_t offs, size_t len,
size_t *retlen, uint8_t *buf, uint8_t *oob)
{
loff_t mask = mtd->writesize - 1;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res;
ops.mode = MTD_OPS_PLACE_OOB;
diff --git a/drivers/mtd/sm_ftl.c b/drivers/mtd/sm_ftl.c
index 0cff2cda1b5a..cb182333d635 100644
--- a/drivers/mtd/sm_ftl.c
+++ b/drivers/mtd/sm_ftl.c
@@ -239,7 +239,7 @@ static int sm_read_sector(struct sm_ftl *ftl,
uint8_t *buffer, struct sm_oob *oob)
{
struct mtd_info *mtd = ftl->trans->mtd;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
struct sm_oob tmp_oob;
int ret = -EIO;
int try = 0;
@@ -323,7 +323,7 @@ static int sm_write_sector(struct sm_ftl *ftl,
int zone, int block, int boffset,
uint8_t *buffer, struct sm_oob *oob)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
struct mtd_info *mtd = ftl->trans->mtd;
int ret;
diff --git a/drivers/mtd/ssfdc.c b/drivers/mtd/ssfdc.c
index 1d05c121904c..04da685c36be 100644
--- a/drivers/mtd/ssfdc.c
+++ b/drivers/mtd/ssfdc.c
@@ -163,7 +163,7 @@ static int read_physical_sector(struct mtd_info *mtd, uint8_t *sect_buf,
/* Read redundancy area (wrapper to MTD_READ_OOB */
static int read_raw_oob(struct mtd_info *mtd, loff_t offs, uint8_t *buf)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int ret;
ops.mode = MTD_OPS_RAW;
diff --git a/drivers/mtd/tests/nandbiterrs.c b/drivers/mtd/tests/nandbiterrs.c
index 08084c018a59..98d7508f95b1 100644
--- a/drivers/mtd/tests/nandbiterrs.c
+++ b/drivers/mtd/tests/nandbiterrs.c
@@ -99,7 +99,7 @@ static int write_page(int log)
static int rewrite_page(int log)
{
int err = 0;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
if (log)
pr_info("rewrite page\n");
diff --git a/drivers/mtd/tests/oobtest.c b/drivers/mtd/tests/oobtest.c
index 532997e10e29..13fed398937e 100644
--- a/drivers/mtd/tests/oobtest.c
+++ b/drivers/mtd/tests/oobtest.c
@@ -56,7 +56,7 @@ static void do_vary_offset(void)
static int write_eraseblock(int ebnum)
{
int i;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int err = 0;
loff_t addr = (loff_t)ebnum * mtd->erasesize;
@@ -165,7 +165,7 @@ static size_t memffshow(loff_t addr, loff_t offset, const void *cs,
static int verify_eraseblock(int ebnum)
{
int i;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int err = 0;
loff_t addr = (loff_t)ebnum * mtd->erasesize;
size_t bitflips;
@@ -260,7 +260,7 @@ static int verify_eraseblock(int ebnum)
static int verify_eraseblock_in_one_go(int ebnum)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int err = 0;
loff_t addr = (loff_t)ebnum * mtd->erasesize;
size_t len = mtd->oobavail * pgcnt;
@@ -338,7 +338,7 @@ static int __init mtd_oobtest_init(void)
int err = 0;
unsigned int i;
uint64_t tmp;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
loff_t addr = 0, addr0;
printk(KERN_INFO "\n");
diff --git a/drivers/mtd/tests/readtest.c b/drivers/mtd/tests/readtest.c
index e70d588083a3..99670ef91f2b 100644
--- a/drivers/mtd/tests/readtest.c
+++ b/drivers/mtd/tests/readtest.c
@@ -47,7 +47,7 @@ static int read_eraseblock_by_page(int ebnum)
err = ret;
}
if (mtd->oobsize) {
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
ops.mode = MTD_OPS_PLACE_OOB;
ops.len = 0;
diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c
index c6821a509481..4061e0ba7010 100644
--- a/fs/jffs2/wbuf.c
+++ b/fs/jffs2/wbuf.c
@@ -1035,7 +1035,7 @@ int jffs2_check_oob_empty(struct jffs2_sb_info *c,
{
int i, ret;
int cmlen = min_t(int, c->oobavail, OOB_CM_SIZE);
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
ops.mode = MTD_OPS_AUTO_OOB;
ops.ooblen = NR_OOB_SCAN_PAGES * c->oobavail;
@@ -1076,7 +1076,7 @@ int jffs2_check_oob_empty(struct jffs2_sb_info *c,
int jffs2_check_nand_cleanmarker(struct jffs2_sb_info *c,
struct jffs2_eraseblock *jeb)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int ret, cmlen = min_t(int, c->oobavail, OOB_CM_SIZE);
ops.mode = MTD_OPS_AUTO_OOB;
@@ -1101,7 +1101,7 @@ int jffs2_write_nand_cleanmarker(struct jffs2_sb_info *c,
struct jffs2_eraseblock *jeb)
{
int ret;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int cmlen = min_t(int, c->oobavail, OOB_CM_SIZE);
ops.mode = MTD_OPS_AUTO_OOB;
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH v2 3/5] mtd: always initialize 'stats' in struct mtd_oob_ops
@ 2021-12-16 8:34 ` Michał Kępień
0 siblings, 0 replies; 3+ messages in thread
From: Michał Kępień @ 2021-12-16 8:34 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra
Cc: Boris Brezillon, linux-mtd, linux-kernel
As the 'stats' field in struct mtd_oob_ops is used in conditional
expressions, ensure it is always zero-initialized in all such structures
to prevent random stack garbage from being interpreted as a pointer.
Strictly speaking, this problem currently only needs to be fixed for
struct mtd_oob_ops structures subsequently passed to mtd_read_oob().
However, this commit goes a step further and makes all instances of
struct mtd_oob_ops in the tree zero-initialized, in hope of preventing
future problems, e.g. if struct mtd_req_stats gets extended with write
statistics at some point.
Signed-off-by: Michał Kępień <kernel@kempniu.pl>
---
Obviously this objective can be achieved in various ways. I was aiming
for a minimal diff which does the job.
drivers/mtd/inftlcore.c | 6 +++---
drivers/mtd/mtdswap.c | 6 +++---
drivers/mtd/nand/onenand/onenand_base.c | 4 ++--
drivers/mtd/nand/onenand/onenand_bbt.c | 2 +-
drivers/mtd/nand/raw/nand_bbt.c | 8 ++++----
drivers/mtd/nand/raw/sm_common.c | 2 +-
drivers/mtd/nftlcore.c | 6 +++---
drivers/mtd/sm_ftl.c | 4 ++--
drivers/mtd/ssfdc.c | 2 +-
drivers/mtd/tests/nandbiterrs.c | 2 +-
drivers/mtd/tests/oobtest.c | 8 ++++----
drivers/mtd/tests/readtest.c | 2 +-
fs/jffs2/wbuf.c | 6 +++---
13 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/drivers/mtd/inftlcore.c b/drivers/mtd/inftlcore.c
index 6b48397c750c..58ca1c21ebe6 100644
--- a/drivers/mtd/inftlcore.c
+++ b/drivers/mtd/inftlcore.c
@@ -136,7 +136,7 @@ static void inftl_remove_dev(struct mtd_blktrans_dev *dev)
int inftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len,
size_t *retlen, uint8_t *buf)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res;
ops.mode = MTD_OPS_PLACE_OOB;
@@ -156,7 +156,7 @@ int inftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len,
int inftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len,
size_t *retlen, uint8_t *buf)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res;
ops.mode = MTD_OPS_PLACE_OOB;
@@ -176,7 +176,7 @@ int inftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len,
static int inftl_write(struct mtd_info *mtd, loff_t offs, size_t len,
size_t *retlen, uint8_t *buf, uint8_t *oob)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res;
ops.mode = MTD_OPS_PLACE_OOB;
diff --git a/drivers/mtd/mtdswap.c b/drivers/mtd/mtdswap.c
index e86b04bc1d6b..ce3796b929e7 100644
--- a/drivers/mtd/mtdswap.c
+++ b/drivers/mtd/mtdswap.c
@@ -323,7 +323,7 @@ static int mtdswap_read_markers(struct mtdswap_dev *d, struct swap_eb *eb)
struct mtdswap_oobdata *data, *data2;
int ret;
loff_t offset;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
offset = mtdswap_eb_offset(d, eb);
@@ -370,7 +370,7 @@ static int mtdswap_write_marker(struct mtdswap_dev *d, struct swap_eb *eb,
struct mtdswap_oobdata n;
int ret;
loff_t offset;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
ops.ooboffs = 0;
ops.oobbuf = (uint8_t *)&n;
@@ -878,7 +878,7 @@ static unsigned int mtdswap_eblk_passes(struct mtdswap_dev *d,
loff_t base, pos;
unsigned int *p1 = (unsigned int *)d->page_buf;
unsigned char *p2 = (unsigned char *)d->oob_buf;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int ret;
ops.mode = MTD_OPS_AUTO_OOB;
diff --git a/drivers/mtd/nand/onenand/onenand_base.c b/drivers/mtd/nand/onenand/onenand_base.c
index 958bac54b190..5810104420a2 100644
--- a/drivers/mtd/nand/onenand/onenand_base.c
+++ b/drivers/mtd/nand/onenand/onenand_base.c
@@ -2935,7 +2935,7 @@ static int do_otp_write(struct mtd_info *mtd, loff_t to, size_t len,
struct onenand_chip *this = mtd->priv;
unsigned char *pbuf = buf;
int ret;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
/* Force buffer page aligned */
if (len < mtd->writesize) {
@@ -2977,7 +2977,7 @@ static int do_otp_lock(struct mtd_info *mtd, loff_t from, size_t len,
size_t *retlen, u_char *buf)
{
struct onenand_chip *this = mtd->priv;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int ret;
if (FLEXONENAND(this)) {
diff --git a/drivers/mtd/nand/onenand/onenand_bbt.c b/drivers/mtd/nand/onenand/onenand_bbt.c
index def89f108007..c9d106d87ab3 100644
--- a/drivers/mtd/nand/onenand/onenand_bbt.c
+++ b/drivers/mtd/nand/onenand/onenand_bbt.c
@@ -61,7 +61,7 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr
int startblock;
loff_t from;
size_t readlen, ooblen;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int rgn;
printk(KERN_INFO "Scanning device for bad blocks\n");
diff --git a/drivers/mtd/nand/raw/nand_bbt.c b/drivers/mtd/nand/raw/nand_bbt.c
index ab630af3a309..817fff3584e3 100644
--- a/drivers/mtd/nand/raw/nand_bbt.c
+++ b/drivers/mtd/nand/raw/nand_bbt.c
@@ -313,7 +313,7 @@ static int scan_read_oob(struct nand_chip *this, uint8_t *buf, loff_t offs,
size_t len)
{
struct mtd_info *mtd = nand_to_mtd(this);
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res, ret = 0;
ops.mode = MTD_OPS_PLACE_OOB;
@@ -354,7 +354,7 @@ static int scan_write_bbt(struct nand_chip *this, loff_t offs, size_t len,
uint8_t *buf, uint8_t *oob)
{
struct mtd_info *mtd = nand_to_mtd(this);
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
ops.mode = MTD_OPS_PLACE_OOB;
ops.ooboffs = 0;
@@ -416,7 +416,7 @@ static int scan_block_fast(struct nand_chip *this, struct nand_bbt_descr *bd,
{
struct mtd_info *mtd = nand_to_mtd(this);
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int ret, page_offset;
ops.ooblen = mtd->oobsize;
@@ -756,7 +756,7 @@ static int write_bbt(struct nand_chip *this, uint8_t *buf,
uint8_t rcode = td->reserved_block_code;
size_t retlen, len = 0;
loff_t to;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
ops.ooblen = mtd->oobsize;
ops.ooboffs = 0;
diff --git a/drivers/mtd/nand/raw/sm_common.c b/drivers/mtd/nand/raw/sm_common.c
index ba24cb36d0b9..6df33e8d77df 100644
--- a/drivers/mtd/nand/raw/sm_common.c
+++ b/drivers/mtd/nand/raw/sm_common.c
@@ -99,7 +99,7 @@ static const struct mtd_ooblayout_ops oob_sm_small_ops = {
static int sm_block_markbad(struct nand_chip *chip, loff_t ofs)
{
struct mtd_info *mtd = nand_to_mtd(chip);
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
struct sm_oob oob;
int ret;
diff --git a/drivers/mtd/nftlcore.c b/drivers/mtd/nftlcore.c
index 913db0dd6a8d..64d319e959b2 100644
--- a/drivers/mtd/nftlcore.c
+++ b/drivers/mtd/nftlcore.c
@@ -124,7 +124,7 @@ int nftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len,
size_t *retlen, uint8_t *buf)
{
loff_t mask = mtd->writesize - 1;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res;
ops.mode = MTD_OPS_PLACE_OOB;
@@ -145,7 +145,7 @@ int nftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len,
size_t *retlen, uint8_t *buf)
{
loff_t mask = mtd->writesize - 1;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res;
ops.mode = MTD_OPS_PLACE_OOB;
@@ -168,7 +168,7 @@ static int nftl_write(struct mtd_info *mtd, loff_t offs, size_t len,
size_t *retlen, uint8_t *buf, uint8_t *oob)
{
loff_t mask = mtd->writesize - 1;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int res;
ops.mode = MTD_OPS_PLACE_OOB;
diff --git a/drivers/mtd/sm_ftl.c b/drivers/mtd/sm_ftl.c
index 0cff2cda1b5a..cb182333d635 100644
--- a/drivers/mtd/sm_ftl.c
+++ b/drivers/mtd/sm_ftl.c
@@ -239,7 +239,7 @@ static int sm_read_sector(struct sm_ftl *ftl,
uint8_t *buffer, struct sm_oob *oob)
{
struct mtd_info *mtd = ftl->trans->mtd;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
struct sm_oob tmp_oob;
int ret = -EIO;
int try = 0;
@@ -323,7 +323,7 @@ static int sm_write_sector(struct sm_ftl *ftl,
int zone, int block, int boffset,
uint8_t *buffer, struct sm_oob *oob)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
struct mtd_info *mtd = ftl->trans->mtd;
int ret;
diff --git a/drivers/mtd/ssfdc.c b/drivers/mtd/ssfdc.c
index 1d05c121904c..04da685c36be 100644
--- a/drivers/mtd/ssfdc.c
+++ b/drivers/mtd/ssfdc.c
@@ -163,7 +163,7 @@ static int read_physical_sector(struct mtd_info *mtd, uint8_t *sect_buf,
/* Read redundancy area (wrapper to MTD_READ_OOB */
static int read_raw_oob(struct mtd_info *mtd, loff_t offs, uint8_t *buf)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int ret;
ops.mode = MTD_OPS_RAW;
diff --git a/drivers/mtd/tests/nandbiterrs.c b/drivers/mtd/tests/nandbiterrs.c
index 08084c018a59..98d7508f95b1 100644
--- a/drivers/mtd/tests/nandbiterrs.c
+++ b/drivers/mtd/tests/nandbiterrs.c
@@ -99,7 +99,7 @@ static int write_page(int log)
static int rewrite_page(int log)
{
int err = 0;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
if (log)
pr_info("rewrite page\n");
diff --git a/drivers/mtd/tests/oobtest.c b/drivers/mtd/tests/oobtest.c
index 532997e10e29..13fed398937e 100644
--- a/drivers/mtd/tests/oobtest.c
+++ b/drivers/mtd/tests/oobtest.c
@@ -56,7 +56,7 @@ static void do_vary_offset(void)
static int write_eraseblock(int ebnum)
{
int i;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int err = 0;
loff_t addr = (loff_t)ebnum * mtd->erasesize;
@@ -165,7 +165,7 @@ static size_t memffshow(loff_t addr, loff_t offset, const void *cs,
static int verify_eraseblock(int ebnum)
{
int i;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int err = 0;
loff_t addr = (loff_t)ebnum * mtd->erasesize;
size_t bitflips;
@@ -260,7 +260,7 @@ static int verify_eraseblock(int ebnum)
static int verify_eraseblock_in_one_go(int ebnum)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int err = 0;
loff_t addr = (loff_t)ebnum * mtd->erasesize;
size_t len = mtd->oobavail * pgcnt;
@@ -338,7 +338,7 @@ static int __init mtd_oobtest_init(void)
int err = 0;
unsigned int i;
uint64_t tmp;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
loff_t addr = 0, addr0;
printk(KERN_INFO "\n");
diff --git a/drivers/mtd/tests/readtest.c b/drivers/mtd/tests/readtest.c
index e70d588083a3..99670ef91f2b 100644
--- a/drivers/mtd/tests/readtest.c
+++ b/drivers/mtd/tests/readtest.c
@@ -47,7 +47,7 @@ static int read_eraseblock_by_page(int ebnum)
err = ret;
}
if (mtd->oobsize) {
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
ops.mode = MTD_OPS_PLACE_OOB;
ops.len = 0;
diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c
index c6821a509481..4061e0ba7010 100644
--- a/fs/jffs2/wbuf.c
+++ b/fs/jffs2/wbuf.c
@@ -1035,7 +1035,7 @@ int jffs2_check_oob_empty(struct jffs2_sb_info *c,
{
int i, ret;
int cmlen = min_t(int, c->oobavail, OOB_CM_SIZE);
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
ops.mode = MTD_OPS_AUTO_OOB;
ops.ooblen = NR_OOB_SCAN_PAGES * c->oobavail;
@@ -1076,7 +1076,7 @@ int jffs2_check_oob_empty(struct jffs2_sb_info *c,
int jffs2_check_nand_cleanmarker(struct jffs2_sb_info *c,
struct jffs2_eraseblock *jeb)
{
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int ret, cmlen = min_t(int, c->oobavail, OOB_CM_SIZE);
ops.mode = MTD_OPS_AUTO_OOB;
@@ -1101,7 +1101,7 @@ int jffs2_write_nand_cleanmarker(struct jffs2_sb_info *c,
struct jffs2_eraseblock *jeb)
{
int ret;
- struct mtd_oob_ops ops;
+ struct mtd_oob_ops ops = { };
int cmlen = min_t(int, c->oobavail, OOB_CM_SIZE);
ops.mode = MTD_OPS_AUTO_OOB;
--
2.34.1
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-01-03 9:13 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-03 9:13 [PATCH v2 3/5] mtd: always initialize 'stats' in struct mtd_oob_ops kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2021-12-16 8:34 [PATCH v2 0/5] mtdchar: add MEMREAD ioctl Michał Kępień
2021-12-16 8:34 ` [PATCH v2 3/5] mtd: always initialize 'stats' in struct mtd_oob_ops Michał Kępień
2021-12-16 8:34 ` Michał Kępień
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.