@@ -29,7 +29,7 @@ - (void) setUp {
2929 self->cacheWrapper .AllocateCache ();
3030 context = vfs_context_create (nullptr );
3131 MockProcess_AddContext (context, 501 /* pid*/ );
32- MockProcess_SetSelfPid (501 );
32+ MockProcess_SetSelfInfo (501 , " Test " );
3333 MockProcess_AddProcess (501 /* pid*/ , 1 /* credentialId*/ , 1 /* ppid*/ , " test" /* name*/ );
3434}
3535
@@ -247,7 +247,7 @@ - (void)testShouldHandleVnodeOpEvent {
247247 // Test with file crawler trying to populate an empty file
248248 testVnode->attrValues .va_flags = FileFlags_IsEmpty | FileFlags_IsInVirtualizationRoot;
249249 MockProcess_Reset ();
250- MockProcess_SetSelfPid (501 );
250+ MockProcess_SetSelfInfo (501 , " Test " );
251251 MockProcess_AddContext (context, 501 /* pid*/ );
252252 MockProcess_AddProcess (501 /* pid*/ , 1 /* credentialId*/ , 1 /* ppid*/ , " mds" /* name*/ );
253253 XCTAssertFalse (
@@ -265,7 +265,7 @@ - (void)testShouldHandleVnodeOpEvent {
265265
266266 // Test with finder trying to populate an empty file
267267 MockProcess_Reset ();
268- MockProcess_SetSelfPid (501 );
268+ MockProcess_SetSelfInfo (501 , " Test " );
269269 MockProcess_AddContext (context, 501 /* pid*/ );
270270 MockProcess_AddProcess (501 /* pid*/ , 1 /* credentialId*/ , 1 /* ppid*/ , " Finder" /* name*/ );
271271 XCTAssertTrue (
@@ -282,47 +282,55 @@ - (void)testShouldHandleVnodeOpEvent {
282282 XCTAssertEqual (kauthResult, KAUTH_RESULT_DEFER );
283283}
284284
285- - (void )testCurrentProcessWasSpawnedByRegularUser {
285+ - (void )testCurrentProcessIsAllowedToHydrate {
286286 // Defaults should pass for all tests
287- XCTAssertTrue (CurrentProcessWasSpawnedByRegularUser ());
287+ XCTAssertTrue (CurrentProcessIsAllowedToHydrate ());
288288 MockProcess_Reset ();
289289
290- // Process is a service user and does not have a parent
290+ // Process and its parents are owned by a system user, and the executable is not a whitelisted service.
291291 MockProcess_AddContext (context, 500 /* pid*/ );
292- MockProcess_SetSelfPid (500 );
292+ MockProcess_SetSelfInfo (500 , " Test " );
293293 MockProcess_AddCredential (1 /* credentialId*/ , 1 /* UID*/ );
294294 MockProcess_AddProcess (500 /* pid*/ , 1 /* credentialId*/ , 501 /* ppid*/ , " test" /* name*/ );
295- XCTAssertFalse (CurrentProcessWasSpawnedByRegularUser ());
295+ XCTAssertFalse (CurrentProcessIsAllowedToHydrate ());
296+ MockProcess_Reset ();
297+
298+ // The service "amfid" and its parents are owned by system users, but the process name is whitelisted for hydration.
299+ MockProcess_AddContext (context, 500 /* pid*/ );
300+ MockProcess_SetSelfInfo (500 , " amfid" );
301+ MockProcess_AddCredential (1 /* credentialId*/ , 1 /* UID*/ );
302+ MockProcess_AddProcess (500 /* pid*/ , 1 /* credentialId*/ , 501 /* ppid*/ , " test" /* name*/ );
303+ XCTAssertTrue (CurrentProcessIsAllowedToHydrate ());
296304 MockProcess_Reset ();
297305
298306 // Test a process with a service UID, valid parent pid, but proc_find fails to find parent pid
299307 MockCalls::Clear ();
300308 MockProcess_AddContext (context, 500 /* pid*/ );
301- MockProcess_SetSelfPid (500 );
309+ MockProcess_SetSelfInfo (500 , " Test " );
302310 MockProcess_AddCredential (1 /* credentialId*/ , 1 /* UID*/ );
303311 MockProcess_AddProcess (500 /* pid*/ , 1 /* credentialId*/ , 501 /* ppid*/ , " test" /* name*/ );
304- XCTAssertFalse (CurrentProcessWasSpawnedByRegularUser ());
312+ XCTAssertFalse (CurrentProcessIsAllowedToHydrate ());
305313 XCTAssertTrue (MockCalls::DidCallFunction (KextMessageLogged, KEXTLOG_ERROR ));
306314 MockProcess_Reset ();
307315
308316 // 'sudo' scenario: Root process with non-root parent
309317 MockProcess_AddContext (context, 502 /* pid*/ );
310- MockProcess_SetSelfPid (502 );
318+ MockProcess_SetSelfInfo (502 , " Test " );
311319 MockProcess_AddCredential (1 /* credentialId*/ , 1 /* UID*/ );
312320 MockProcess_AddCredential (2 /* credentialId*/ , 501 /* UID*/ );
313321 MockProcess_AddProcess (502 /* pid*/ , 1 /* credentialId*/ , 501 /* ppid*/ , " test" /* name*/ );
314322 MockProcess_AddProcess (501 /* pid*/ , 2 /* credentialId*/ , 1 /* ppid*/ , " test" /* name*/ );
315- XCTAssertTrue (CurrentProcessWasSpawnedByRegularUser ());
323+ XCTAssertTrue (CurrentProcessIsAllowedToHydrate ());
316324 MockProcess_Reset ();
317325
318326 // Process and it's parent are service users
319327 MockProcess_AddContext (context, 502 /* pid*/ );
320- MockProcess_SetSelfPid (502 );
328+ MockProcess_SetSelfInfo (502 , " Test " );
321329 MockProcess_AddCredential (1 /* credentialId*/ , 1 /* UID*/ );
322330 MockProcess_AddCredential (2 /* credentialId*/ , 2 /* UID*/ );
323331 MockProcess_AddProcess (502 /* pid*/ , 1 /* credentialId*/ , 501 /* ppid*/ , " test" /* name*/ );
324332 MockProcess_AddProcess (501 /* pid*/ , 2 /* credentialId*/ , 1 /* ppid*/ , " test" /* name*/ );
325- XCTAssertFalse (CurrentProcessWasSpawnedByRegularUser ());
333+ XCTAssertFalse (CurrentProcessIsAllowedToHydrate ());
326334}
327335
328336- (void )testUseMainForkIfNamedStream {
0 commit comments