All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Michael Schmitz <schmitzmic@gmail.com>,
	linux-block@vger.kernel.org, axboe@kernel.dk
Cc: kbuild-all@lists.01.org, linux-m68k@vger.kernel.org,
	geert@linux-m68k.org, Michael Schmitz <schmitzmic@gmail.com>
Subject: Re: [PATCH v8 2/2] block: add overflow checks for Amiga partition support
Date: Tue, 26 Jul 2022 20:53:12 +0800	[thread overview]
Message-ID: <202207262047.yRImNV4v-lkp@intel.com> (raw)
In-Reply-To: <20220726045747.4779-3-schmitzmic@gmail.com>

Hi Michael,

I love your patch! Perhaps something to improve:

[auto build test WARNING on axboe-block/for-next]
[also build test WARNING on linus/master v5.19-rc8 next-20220725]
[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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Michael-Schmitz/Amiga-RDB-partition-support-fixes/20220726-125830
base:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next
config: sparc-randconfig-s041-20220724 (https://download.01.org/0day-ci/archive/20220726/202207262047.yRImNV4v-lkp@intel.com/config)
compiler: sparc-linux-gcc (GCC) 12.1.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.4-39-gce1a6720-dirty
        # https://github.com/intel-lab-lkp/linux/commit/ccbc09d2b458d51ac395c4f8ea7cf703f6e83fdf
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Michael-Schmitz/Amiga-RDB-partition-support-fixes/20220726-125830
        git checkout ccbc09d2b458d51ac395c4f8ea7cf703f6e83fdf
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sparc SHELL=/bin/bash block/partitions/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

sparse warnings: (new ones prefixed by >>)
>> block/partitions/amiga.c:132:30: sparse: sparse: cast to restricted __be32
   block/partitions/amiga.c:133:25: sparse: sparse: cast to restricted __be32

vim +132 block/partitions/amiga.c

    35	
    36	int amiga_partition(struct parsed_partitions *state)
    37	{
    38		Sector sect;
    39		unsigned char *data;
    40		struct RigidDiskBlock *rdb;
    41		struct PartitionBlock *pb;
    42		u64 start_sect, nr_sects;
    43		sector_t blk, end_sect;
    44		u32 cylblk;		/* rdb_CylBlocks = nr_heads*sect_per_track */
    45		u32 nr_hd, nr_sect, lo_cyl, hi_cyl;
    46		int part, res = 0;
    47		unsigned int blksize = 1;	/* Multiplier for disk block size */
    48		int slot = 1;
    49	
    50		for (blk = 0; ; blk++, put_dev_sector(sect)) {
    51			if (blk == RDB_ALLOCATION_LIMIT)
    52				goto rdb_done;
    53			data = read_part_sector(state, blk, &sect);
    54			if (!data) {
    55				pr_err("Dev %s: unable to read RDB block %llu\n",
    56				       state->disk->disk_name, (u64) blk);
    57				res = -1;
    58				goto rdb_done;
    59			}
    60			if (*(__be32 *)data != cpu_to_be32(IDNAME_RIGIDDISK))
    61				continue;
    62	
    63			rdb = (struct RigidDiskBlock *)data;
    64			if (checksum_block((__be32 *)data, be32_to_cpu(rdb->rdb_SummedLongs) & 0x7F) == 0)
    65				break;
    66			/* Try again with 0xdc..0xdf zeroed, Windows might have
    67			 * trashed it.
    68			 */
    69			*(__be32 *)(data+0xdc) = 0;
    70			if (checksum_block((__be32 *)data,
    71					be32_to_cpu(rdb->rdb_SummedLongs) & 0x7F)==0) {
    72				pr_err("Trashed word at 0xd0 in block %llu ignored in checksum calculation\n",
    73				       (u64) blk);
    74				break;
    75			}
    76	
    77			pr_err("Dev %s: RDB in block %llu has bad checksum\n",
    78			       state->disk->disk_name, (u64) blk);
    79		}
    80	
    81		/* blksize is blocks per 512 byte standard block */
    82		blksize = be32_to_cpu( rdb->rdb_BlockBytes ) / 512;
    83	
    84		{
    85			char tmp[7 + 10 + 1 + 1];
    86	
    87			/* Be more informative */
    88			snprintf(tmp, sizeof(tmp), " RDSK (%d)", blksize * 512);
    89			strlcat(state->pp_buf, tmp, PAGE_SIZE);
    90		}
    91		blk = be32_to_cpu(rdb->rdb_PartitionList);
    92		put_dev_sector(sect);
    93		for (part = 1; blk>0 && part<=16; part++, put_dev_sector(sect)) {
    94			/* Read in terms partition table understands */
    95			if (check_mul_overflow(blk, (sector_t) blksize, &blk)) {
    96				pr_err("Dev %s: overflow calculating partition block %llu! Skipping partitions %u and beyond\n",
    97					state->disk->disk_name, (u64) blk, part);
    98				break;
    99			}
   100			data = read_part_sector(state, blk, &sect);
   101			if (!data) {
   102				pr_err("Dev %s: unable to read partition block %llu\n",
   103				       state->disk->disk_name, (u64) blk);
   104				res = -1;
   105				goto rdb_done;
   106			}
   107			pb  = (struct PartitionBlock *)data;
   108			blk = be32_to_cpu(pb->pb_Next);
   109			if (pb->pb_ID != cpu_to_be32(IDNAME_PARTITION))
   110				continue;
   111			if (checksum_block((__be32 *)pb, be32_to_cpu(pb->pb_SummedLongs) & 0x7F) != 0 )
   112				continue;
   113	
   114			/* RDB gives us more than enough rope to hang ourselves with,
   115			 * many times over (2^128 bytes if all fields max out).
   116			 * Some careful checks are in order, so check for potential
   117			 * overflows.
   118			 * We are multiplying four 32 bit numbers to one sector_t!
   119			 */
   120	
   121			nr_hd   = be32_to_cpu(pb->pb_Environment[NR_HD]);
   122			nr_sect = be32_to_cpu(pb->pb_Environment[NR_SECT]);
   123	
   124			/* CylBlocks is total number of blocks per cylinder */
   125			if (check_mul_overflow(nr_hd, nr_sect, &cylblk)) {
   126				pr_err("Dev %s: heads*sects %u overflows u32, skipping partition!\n",
   127					state->disk->disk_name, cylblk);
   128				continue;
   129			}
   130	
   131			/* check for consistency with RDB defined CylBlocks */
 > 132			if (cylblk > be32_to_cpu(rdb->rdb_CylBlocks)) {

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

      parent reply	other threads:[~2022-07-26 12:54 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-26  4:57 [PATCH v8 0/2] Amiga RDB partition support fixes Michael Schmitz
2022-07-26  4:57 ` [PATCH v8 1/2] block: fix signed int overflow in Amiga partition support Michael Schmitz
2022-07-26 11:41   ` Christoph Hellwig
2022-07-26  4:57 ` [PATCH v8 2/2] block: add overflow checks for " Michael Schmitz
2022-07-26 11:42   ` Christoph Hellwig
2022-07-26 22:28     ` Michael Schmitz
2022-08-11 11:40     ` Geert Uytterhoeven
2022-08-22 20:38       ` Michael Schmitz
2022-08-22 21:03         ` Geert Uytterhoeven
2022-08-22 21:09           ` Michael Schmitz
2022-07-26 12:53   ` kernel test robot [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202207262047.yRImNV4v-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=axboe@kernel.dk \
    --cc=geert@linux-m68k.org \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-m68k@vger.kernel.org \
    --cc=schmitzmic@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.