* drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR'
@ 2021-03-03 5:49 Dan Carpenter
2021-03-03 8:48 ` Miquel Raynal
0 siblings, 1 reply; 4+ messages in thread
From: Dan Carpenter @ 2021-03-03 5:49 UTC (permalink / raw)
To: kbuild, Manivannan Sadhasivam
Cc: lkp, kbuild-all, linux-kernel, Miquel Raynal
[-- Attachment #1: Type: text/plain, Size: 9412 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 7a7fd0de4a9804299793e564a555a49c1fc924cb
commit: 803eb124e1a64e42888542c3444bfe6dac412c7f mtd: parsers: Add Qcom SMEM parser
config: nds32-randconfig-m031-20210302 (attached as .config)
compiler: nds32le-linux-gcc (GCC) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR'
vim +/PTR_ERR +109 drivers/mtd/parsers/qcomsmempart.c
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 57 static int parse_qcomsmem_part(struct mtd_info *mtd,
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 58 const struct mtd_partition **pparts,
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 59 struct mtd_part_parser_data *data)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 60 {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 61 struct smem_flash_pentry *pentry;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 62 struct smem_flash_ptable *ptable;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 63 size_t len = SMEM_FLASH_PTABLE_HDR_LEN;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 64 struct mtd_partition *parts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 65 int ret, i, numparts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 66 char *name, *c;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 67
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 68 pr_debug("Parsing partition table info from SMEM\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 69 ptable = qcom_smem_get(SMEM_APPS, SMEM_AARM_PARTITION_TABLE, &len);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 70 if (IS_ERR(ptable)) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 71 pr_err("Error reading partition table header\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 72 return PTR_ERR(ptable);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 73 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 74
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 75 /* Verify ptable magic */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 76 if (le32_to_cpu(ptable->magic1) != SMEM_FLASH_PART_MAGIC1 ||
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 77 le32_to_cpu(ptable->magic2) != SMEM_FLASH_PART_MAGIC2) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 78 pr_err("Partition table magic verification failed\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 79 return -EINVAL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 80 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 81
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 82 /* Ensure that # of partitions is less than the max we have allocated */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 83 numparts = le32_to_cpu(ptable->numparts);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 84 if (numparts > SMEM_FLASH_PTABLE_MAX_PARTS_V4) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 85 pr_err("Partition numbers exceed the max limit\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 86 return -EINVAL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 87 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 88
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 89 /* Find out length of partition data based on table version */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 90 if (le32_to_cpu(ptable->version) <= SMEM_FLASH_PTABLE_V3) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 91 len = SMEM_FLASH_PTABLE_HDR_LEN + SMEM_FLASH_PTABLE_MAX_PARTS_V3 *
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 92 sizeof(struct smem_flash_pentry);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 93 } else if (le32_to_cpu(ptable->version) == SMEM_FLASH_PTABLE_V4) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 94 len = SMEM_FLASH_PTABLE_HDR_LEN + SMEM_FLASH_PTABLE_MAX_PARTS_V4 *
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 95 sizeof(struct smem_flash_pentry);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 96 } else {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 97 pr_err("Unknown ptable version (%d)", le32_to_cpu(ptable->version));
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 98 return -EINVAL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 99 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 100
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 101 /*
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 102 * Now that the partition table header has been parsed, verified
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 103 * and the length of the partition table calculated, read the
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 104 * complete partition table
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 105 */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 106 ptable = qcom_smem_get(SMEM_APPS, SMEM_AARM_PARTITION_TABLE, &len);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 107 if (IS_ERR_OR_NULL(ptable)) {
^^^^^^^^^^^^^^^^^^^^^^
This should be IS_ERR(). The qcom_smem_get() function doesn't return
NULL.
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 108 pr_err("Error reading partition table\n");
When a function returns both error pointers and NULL, the NULL return
is a special case of success where the feature isn't able because it
has be deliberately disabled. The NULL return should not generate an
error message.
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 @109 return PTR_ERR(ptable);
PTR_ERR(NULL) is success. But let's just fix the IS_ERR_OR_NULL() check
to IS_ERR() so we don't have to wonder if returning success is
intentional.
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 110 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 111
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 112 parts = kcalloc(numparts, sizeof(*parts), GFP_KERNEL);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 113 if (!parts)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 114 return -ENOMEM;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 115
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 116 for (i = 0; i < numparts; i++) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 117 pentry = &ptable->pentry[i];
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 118 if (pentry->name[0] == '\0')
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 119 continue;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 120
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 121 name = kstrdup(pentry->name, GFP_KERNEL);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 122 if (!name) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 123 ret = -ENOMEM;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 124 goto out_free_parts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 125 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 126
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 127 /* Convert name to lower case */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 128 for (c = name; *c != '\0'; c++)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 129 *c = tolower(*c);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 130
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 131 parts[i].name = name;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 132 parts[i].offset = le32_to_cpu(pentry->offset) * mtd->erasesize;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 133 parts[i].mask_flags = pentry->attr;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 134 parts[i].size = le32_to_cpu(pentry->length) * mtd->erasesize;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 135 pr_debug("%d: %s offs=0x%08x size=0x%08x attr:0x%08x\n",
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 136 i, pentry->name, le32_to_cpu(pentry->offset),
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 137 le32_to_cpu(pentry->length), pentry->attr);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 138 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 139
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 140 pr_debug("SMEM partition table found: ver: %d len: %d\n",
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 141 le32_to_cpu(ptable->version), numparts);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 142 *pparts = parts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 143
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 144 return numparts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 145
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 146 out_free_parts:
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 147 while (--i >= 0)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 148 kfree(parts[i].name);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 149 kfree(parts);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 150 *pparts = NULL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 151
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 152 return ret;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 153 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28262 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR'
2021-03-03 5:49 drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR' Dan Carpenter
@ 2021-03-03 8:48 ` Miquel Raynal
2021-03-03 11:08 ` Dan Carpenter
2021-03-03 16:27 ` Manivannan Sadhasivam
0 siblings, 2 replies; 4+ messages in thread
From: Miquel Raynal @ 2021-03-03 8:48 UTC (permalink / raw)
To: Dan Carpenter
Cc: kbuild, Manivannan Sadhasivam, lkp, kbuild-all, linux-kernel
Hello,
Dan Carpenter <dan.carpenter@oracle.com> wrote on Wed, 3 Mar 2021
08:49:18 +0300:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: 7a7fd0de4a9804299793e564a555a49c1fc924cb
> commit: 803eb124e1a64e42888542c3444bfe6dac412c7f mtd: parsers: Add Qcom SMEM parser
> config: nds32-randconfig-m031-20210302 (attached as .config)
> compiler: nds32le-linux-gcc (GCC) 9.3.0
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
>
> smatch warnings:
> drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR'
>
> vim +/PTR_ERR +109 drivers/mtd/parsers/qcomsmempart.c
>
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 57 static int parse_qcomsmem_part(struct mtd_info *mtd,
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 58 const struct mtd_partition **pparts,
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 59 struct mtd_part_parser_data *data)
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 60 {
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 61 struct smem_flash_pentry *pentry;
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 62 struct smem_flash_ptable *ptable;
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 63 size_t len = SMEM_FLASH_PTABLE_HDR_LEN;
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 64 struct mtd_partition *parts;
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 65 int ret, i, numparts;
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 66 char *name, *c;
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 67
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 68 pr_debug("Parsing partition table info from SMEM\n");
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 69 ptable = qcom_smem_get(SMEM_APPS, SMEM_AARM_PARTITION_TABLE, &len);
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 70 if (IS_ERR(ptable)) {
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 71 pr_err("Error reading partition table header\n");
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 72 return PTR_ERR(ptable);
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 73 }
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 74
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 75 /* Verify ptable magic */
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 76 if (le32_to_cpu(ptable->magic1) != SMEM_FLASH_PART_MAGIC1 ||
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 77 le32_to_cpu(ptable->magic2) != SMEM_FLASH_PART_MAGIC2) {
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 78 pr_err("Partition table magic verification failed\n");
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 79 return -EINVAL;
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 80 }
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 81
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 82 /* Ensure that # of partitions is less than the max we have allocated */
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 83 numparts = le32_to_cpu(ptable->numparts);
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 84 if (numparts > SMEM_FLASH_PTABLE_MAX_PARTS_V4) {
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 85 pr_err("Partition numbers exceed the max limit\n");
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 86 return -EINVAL;
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 87 }
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 88
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 89 /* Find out length of partition data based on table version */
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 90 if (le32_to_cpu(ptable->version) <= SMEM_FLASH_PTABLE_V3) {
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 91 len = SMEM_FLASH_PTABLE_HDR_LEN + SMEM_FLASH_PTABLE_MAX_PARTS_V3 *
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 92 sizeof(struct smem_flash_pentry);
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 93 } else if (le32_to_cpu(ptable->version) == SMEM_FLASH_PTABLE_V4) {
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 94 len = SMEM_FLASH_PTABLE_HDR_LEN + SMEM_FLASH_PTABLE_MAX_PARTS_V4 *
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 95 sizeof(struct smem_flash_pentry);
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 96 } else {
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 97 pr_err("Unknown ptable version (%d)", le32_to_cpu(ptable->version));
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 98 return -EINVAL;
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 99 }
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 100
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 101 /*
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 102 * Now that the partition table header has been parsed, verified
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 103 * and the length of the partition table calculated, read the
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 104 * complete partition table
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 105 */
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 106 ptable = qcom_smem_get(SMEM_APPS, SMEM_AARM_PARTITION_TABLE, &len);
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 107 if (IS_ERR_OR_NULL(ptable)) {
> ^^^^^^^^^^^^^^^^^^^^^^
> This should be IS_ERR(). The qcom_smem_get() function doesn't return
> NULL.
>
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 108 pr_err("Error reading partition table\n");
>
> When a function returns both error pointers and NULL, the NULL return
> is a special case of success where the feature isn't able because it
> has be deliberately disabled. The NULL return should not generate an
> error message.
>
> 803eb124e1a64e Manivannan Sadhasivam 2021-01-04 @109 return PTR_ERR(ptable);
>
> PTR_ERR(NULL) is success. But let's just fix the IS_ERR_OR_NULL() check
> to IS_ERR() so we don't have to wonder if returning success is
> intentional.
Thanks for the report, I've just sent the fix.
@Manni, I thought you would be added in Cc automatically as you're the
author of the fixed commit, but I was wrong, sorry for the mistake.
Thanks,
Miquèl
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR'
2021-03-03 8:48 ` Miquel Raynal
@ 2021-03-03 11:08 ` Dan Carpenter
2021-03-03 16:27 ` Manivannan Sadhasivam
1 sibling, 0 replies; 4+ messages in thread
From: Dan Carpenter @ 2021-03-03 11:08 UTC (permalink / raw)
To: Miquel Raynal
Cc: kbuild, Manivannan Sadhasivam, lkp, kbuild-all, linux-kernel
On Wed, Mar 03, 2021 at 09:48:40AM +0100, Miquel Raynal wrote:
>
> @Manni, I thought you would be added in Cc automatically as you're the
> author of the fixed commit, but I was wrong, sorry for the mistake.
That's very weird... get_maintainer.pl does look up the fixes tag and
adds the commit signers. I tested your patch and it added
<mani@kernel.org> for me.
regards,
dan carpenter
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR'
2021-03-03 8:48 ` Miquel Raynal
2021-03-03 11:08 ` Dan Carpenter
@ 2021-03-03 16:27 ` Manivannan Sadhasivam
1 sibling, 0 replies; 4+ messages in thread
From: Manivannan Sadhasivam @ 2021-03-03 16:27 UTC (permalink / raw)
To: Miquel Raynal; +Cc: Dan Carpenter, kbuild, lkp, kbuild-all, linux-kernel
On Wed, Mar 03, 2021 at 09:48:40AM +0100, Miquel Raynal wrote:
> Hello,
>
[...]
> > PTR_ERR(NULL) is success. But let's just fix the IS_ERR_OR_NULL() check
> > to IS_ERR() so we don't have to wonder if returning success is
> > intentional.
>
> Thanks for the report, I've just sent the fix.
>
Thanks for that!
> @Manni, I thought you would be added in Cc automatically as you're the
> author of the fixed commit, but I was wrong, sorry for the mistake.
>
np.
Thanks,
Mani
> Thanks,
> Miquèl
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-03-03 19:11 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-03 5:49 drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR' Dan Carpenter
2021-03-03 8:48 ` Miquel Raynal
2021-03-03 11:08 ` Dan Carpenter
2021-03-03 16:27 ` Manivannan Sadhasivam
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).