Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c5f923d authored by Stephen Crane's avatar Stephen Crane
Browse files

libbinder_rs: Handle empty args list for dump transactions

Previously we expected the args pointer passed to the handler for dump
transactions to be non-null. If there are no arguments this
pointer may be null and we should pass an empty args list instead of
erroring out.

Bug: 232887857
Test: atest -p frameworks/native/libs/binder
Test: cts -m  CtsSecurityTestCases -t android.security.cts.ServicePermissionsTest#testDumpProtected
Change-Id: If2b08c688a374913ef0913749efc72db07e7776f
parent d05c0b93
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -335,11 +335,16 @@ impl<T: Remotable> InterfaceClassMethods for Binder<T> {
        // We don't own this file, so we need to be careful not to drop it.
        let file = ManuallyDrop::new(File::from_raw_fd(fd));

        if args.is_null() {
        if args.is_null() && num_args != 0 {
            return StatusCode::UNEXPECTED_NULL as status_t;
        }
        let args = slice::from_raw_parts(args, num_args as usize);
        let args: Vec<_> = args.iter().map(|s| CStr::from_ptr(*s)).collect();

        let args = if args.is_null() || num_args == 0 {
            vec![]
        } else {
            slice::from_raw_parts(args, num_args as usize)
                .iter().map(|s| CStr::from_ptr(*s)).collect()
        };

        let object = sys::AIBinder_getUserData(binder);
        let binder: &T = &*(object as *const T);