On Thu, Jan 25, 2024 at 02:15:37AM +0200, Eduard Zingerman wrote: > This is a backport of two upstream patch-sets: > 1. "exact states comparison for iterator convergence checks" > https://lore.kernel.org/all/20231024000917.12153-1-eddyz87@xxxxxxxxx/ > 2. "verify callbacks as if they are called unknown number of times" > https://lore.kernel.org/all/20231121020701.26440-1-eddyz87@xxxxxxxxx/ > > Both patch-sets fix BPF verifier logic related to handling loops: > for bpf iterators, and for helper functions that accept callback > functions. > > The backport of (2) was requested as a response to bug report by > Mateusz Gienieczko <mat.gienieczko@xxxxxx>. > The (1) is a dependency of (2). > > The patch-set was tested by running BPF verifier selftests on my local > qemu-based setup. > > Most of the commits could be cherry-picked but three required merging: > > | Action | Upstream commit | > |--------+-------------------------------------------------------------------------------------------------| > | pick | 3c4e420cb653 ("bpf: move explored_state() closer to the beginning of verifier.c ") | > | pick | 4c97259abc9b ("bpf: extract same_callsites() as utility function ") | > | merge | 2793a8b015f7 ("bpf: exact states comparison for iterator convergence checks ") | > | pick | 389ede06c297 ("selftests/bpf: tests with delayed read/precision makrs in loop body ") | > | pick | 2a0992829ea3 ("bpf: correct loop detection for iterators convergence ") | > | pick | 64870feebecb ("selftests/bpf: test if state loops are detected in a tricky case ") | > | pick | b4d8239534fd ("bpf: print full verifier states on infinite loop detection ") | > | drop | dedd6c894110 ("Merge branch 'exact-states-comparison-for-iterator-convergence-checks' ") | > |--------+-------------------------------------------------------------------------------------------------| > | pick | 977bc146d4eb ("selftests/bpf: track tcp payload offset as scalar in xdp_synproxy ") | > | pick | 87eb0152bcc1 ("selftests/bpf: track string payload offset as scalar in strobemeta ") | > | pick | 683b96f9606a ("bpf: extract __check_reg_arg() utility function ") | > | pick | 58124a98cb8e ("bpf: extract setup_func_entry() utility function ") | > | merge | ab5cfac139ab ("bpf: verify callbacks as if they are called unknown number of times ") | > | pick | 958465e217db ("selftests/bpf: tests for iterating callbacks ") | > | pick | cafe2c21508a ("bpf: widening for callback iterators ") | > | pick | 9f3330aa644d ("selftests/bpf: test widening for iterating callbacks ") | > | merge | bb124da69c47 ("bpf: keep track of max number of bpf_loop callback iterations ") | > | pick | 57e2a52deeb1 ("selftests/bpf: check if max number of bpf_loop iterations is tracked ") | > | drop | acb12c859ac7 ("Merge branch 'verify-callbacks-as-if-they-are-called-unknown-number-of-times' ") | > > Note: > I don't know how deal with merge commits, so I just dropped those. > These commits are empty but contain cover letters for both series, > so it might be useful to pick those (how?). Nah, merge commits are not needed to be backported, that doesn't work :) All now queued up, thanks! greg k-h