[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAG_fn=W55uuPbpvjzCphgiMbmhnFmmWY=KcOGvmUv14_JOGc5g@mail.gmail.com>
Date: Thu, 13 Dec 2018 12:00:59 +0100
From: Alexander Potapenko <glider@...gle.com>
To: ast@...nel.org, daniel@...earbox.net
Cc: Dmitriy Vyukov <dvyukov@...gle.com>,
Networking <netdev@...r.kernel.org>
Subject: Self-XORing BPF registers is undefined behavior
Hi BPF maintainers,
some time ago KMSAN found an issue in BPF code which we decided to
suppress at that point, but now I'd like to bring it to your
attention.
Namely, some BPF programs may contain instructions that XOR a register
with itself.
This effectively results in the following C code:
regs[BPF_REG_A] = regs[BPF_REG_A] ^ regs[BPF_REG_A];
or
regs[BPF_REG_X] = regs[BPF_REG_X] ^ regs[BPF_REG_X];
being executed.
According to the C11 standard this is undefined behavior, so KMSAN
reports an error in this case.
Do you think it's feasible to explicitly initialize the register
values like it's done here:
https://github.com/google/kmsan/commit/813c0f3d45ebfa321d70b4b06cc054518dd1d90d
?
Thanks,
Alexander Potapenko
Software Engineer
Google Germany GmbH
Erika-Mann-Straße, 33
80636 München
Geschäftsführer: Paul Manicle, Halimah DeLaine Prado
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Powered by blists - more mailing lists