[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20190322025915.rwxwrgxccf7hmyje@ast-mbp.dhcp.thefacebook.com>
Date: Thu, 21 Mar 2019 19:59:18 -0700
From: Alexei Starovoitov <alexei.starovoitov@...il.com>
To: Jakub Kicinski <jakub.kicinski@...ronome.com>
Cc: daniel@...earbox.net, netdev@...r.kernel.org, bpf@...r.kernel.org,
oss-drivers@...ronome.com
Subject: Re: [PATCH bpf] bpf: verifier: propagate liveness on all frames
On Thu, Mar 21, 2019 at 02:34:36PM -0700, Jakub Kicinski wrote:
> Commit 7640ead93924 ("bpf: verifier: make sure callees don't prune
> with caller differences") connected up parentage chains of all
> frames of the stack. It didn't, however, ensure propagate_liveness()
> propagates all liveness information along those chains.
>
> This means pruning happening in the callee may generate explored
> states with incomplete liveness for the chains in lower frames
> of the stack.
>
> The included selftest is similar to the prior one from commit
> 7640ead93924 ("bpf: verifier: make sure callees don't prune with
> caller differences"), where callee would prune regardless of the
> difference in r8 state.
>
> Now we also initialize r9 to 0 or 1 based on a result from get_random().
> r9 is never read so the walk with r9 = 0 gets pruned (correctly) after
> the walk with r9 = 1 completes.
>
> The selftest is so arranged that the pruning will happen in the
> callee. Since callee does not propagate read marks of r8, the
> explored state at the pruning point prior to the callee will
> now ignore r8.
>
> Propagate liveness on all frames of the stack when pruning.
>
> Fixes: f4d7e40a5b71 ("bpf: introduce function calls (verification)")
> Signed-off-by: Jakub Kicinski <jakub.kicinski@...ronome.com>
wow. Applied. Thanks a lot.
Powered by blists - more mailing lists