On Fri, Feb 03, 2023 at 06:26:09PM +0000, Catalin Marinas wrote:
On Wed, Feb 01, 2023 at 01:59:33PM -0800, kernelci.org bot wrote:
arm64/for-kernelci build: 2 builds: 1 failed, 1 passed, 1 error, 1 warning (v6.2-rc6-115-gca72d58361ee)
Full Build Summary: https://kernelci.org/build/arm64/branch/for-kernelci/kernel/v6.2-rc6-115-gca...
Tree: arm64 Branch: for-kernelci Git Describe: v6.2-rc6-115-gca72d58361ee Git Commit: ca72d58361ee2e0d246385d21474b283f67416b9 Git URL: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git Built: 1 unique architecture
Build Failure Detected:
arm64: allmodconfig: (gcc-10) FAIL
Errors and Warnings Detected:
arm64: allmodconfig (gcc-10): 1 error, 1 warning
Errors summary:
1 include/linux/fortify-string.h:57:29: error: argument 2 null where non-null expected [-Werror=nonnull]
For some reason this shows with gcc-10 on arm64 allmodconfig but it's been around for some time. We only noticed it now due to the SLUB_TINY config that made it into 6.2-rc1 which disables KASAN. I can trigger it on 6.1 just by disabling KASAN after an allmodconfig.
The problem is the NULL 2nd argument passed to append_fifo_load_as_imm() in gen_split_key() in drivers/crypto/caam/key_gen.c. The error below looks sane to me and the key_gen.c needs fixing as you can't do a memcpy() from a NULL source pointer. But I have no clue how to fix it, so cc'ing the code author and crypto maintainer.
Actually, we can conclude that gcc-10 is not smart enough and ignore this report. The call gen_split_key() has len == 0:
append_fifo_load_as_imm(desc, NULL, 0, LDST_CLASS_2_CCB | FIFOLD_TYPE_MSG | FIFOLD_TYPE_LAST2);
It ends up in append_data(), again with len == 0, which does:
if (len) /* avoid sparse warning: memcpy with byte count of 0 */ memcpy(offset, data, len);
So memcpy() should never get a NULL argument but gcc cannot figure it out. We could extend the check above to (len && data) but it's just for a compiler problem. I haven't seen this with gcc-12.