On 3/8/23 7:45 PM, Dave Marchevsky wrote: > Kfuncs marked KF_RELEASE indicate that they release some > previously-acquired arg. The verifier assumes that such a function will > only have one arg reg w/ ref_obj_id set, and that that arg is the one to > be released. Multiple kfunc arg regs have ref_obj_id set is considered > an invalid state. > > For helpers, OBJ_RELEASE is used to tag a particular arg in the function > proto, not the function itself. The arg with OBJ_RELEASE type tag is the > arg that the helper will release. There can only be one such tagged arg. > When verifying arg regs, multiple helper arg regs w/ ref_obj_id set is > also considered an invalid state. > > Currently the ref_obj_id and OBJ_RELEASE searching is done in the code > that examines each individual arg (check_func_arg for helpers and > check_kfunc_args inner loop for kfuncs). This patch pulls out this > searching to occur before individual arg type handling, resulting in a > cleaner separation of logic and shared logic between kfuncs and helpers. > > Two new helper functions are added: > * args_find_ref_obj_id_regno > * For helpers and kfuncs. Searches through arg regs to find > ref_obj_id reg and returns its regno. > > * helper_proto_find_release_arg_regno > * For helpers only. Searches through fn proto args to find the > OBJ_RELEASE arg and returns the corresponding regno. > > The refactoring strives to keep failure logic and error messages > unchanged. However, because the release arg searching is now done before > any arg-specific type checking, verifier states that are invalid due to > both invalid release arg state _and_ some type- or helper-specific > checking logic might see the release arg-related error message first, > when previously verification would fail for the other reason. > > Signed-off-by: Dave Marchevsky <davemarchevsky@xxxxxx> > --- Bunch of CI test failures :(. Ignore.