From ae2d37f66bacfc8f02271c0fa7ac513361f9a6af Mon Sep 17 00:00:00 2001 From: schulz Date: Sat, 25 Apr 2015 19:56:48 +0000 Subject: [PATCH] Do not access SysBase->ThisTask outside exec.library. The code should not rely on validity of this SysBase variable. Instead, FindTask(NULL) shall be used everywhere outside exec. git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@50462 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- compiler/posixc/__vfork.c | 2 +- rom/dos/dos_intern.h | 2 +- rom/filesys/pfs3/fs/ks13wrapper.c | 2 +- rom/graphics/fakegfxhidd.c | 2 +- rom/intuition/lockpubscreen.c | 7 ++++--- rom/intuition/unlockpubscreen.c | 7 ++++--- test/exceptiontest.c | 10 ++++++---- test/exec/tasktest.c | 2 +- test/exec/tasktest2.c | 2 +- workbench/c/TaskList.c | 2 +- workbench/devs/AHI/Drivers/Device/device-playslave.c | 2 +- workbench/devs/AHI/Drivers/Filesave/filesave-playslave.c | 2 +- workbench/devs/AHI/Drivers/Filesave/filesave-recslave.c | 2 +- workbench/devs/AHI/Drivers/Void/void-playslave.c | 2 +- workbench/network/stacks/AROSTCP/bsdsocket/api/amiga_api.c | 4 ++-- .../stacks/AROSTCP/bsdsocket/api/amiga_libcallentry.h | 12 ++++++------ workbench/network/stacks/AROSTCP/bsdsocket/kern/kern_synch.c | 2 +- workbench/network/stacks/AROSTCP/netlib/chmod.c | 3 ++- workbench/network/stacks/AROSTCP/netlib/chown.c | 3 ++- workbench/network/stacks/AROSTCP/netlib/dosio_init.c | 3 ++- workbench/network/stacks/AROSTCP/netlib/printfault.c | 3 ++- workbench/network/stacks/AROSTCP/netlib/printuserfault.c | 3 ++- workbench/system/Snoopy/main.c | 2 +- workbench/system/Snoopy/patches.c | 4 ++-- 24 files changed, 47 insertions(+), 38 deletions(-) diff --git a/compiler/posixc/__vfork.c b/compiler/posixc/__vfork.c index 4dfbcc7f47..829adce655 100644 --- a/compiler/posixc/__vfork.c +++ b/compiler/posixc/__vfork.c @@ -110,7 +110,7 @@ static __attribute__((noinline)) void __vfork_exit_controlled_stack(struct vfork LONG launcher() { - D(bug("launcher: Entered child launcher, ThisTask=%p\n", SysBase->ThisTask)); + D(bug("launcher: Entered child launcher, ThisTask=%p\n", FindTask(NULL))); struct Task *this = FindTask(NULL); struct vfork_data *udata = this->tc_UserData; diff --git a/rom/dos/dos_intern.h b/rom/dos/dos_intern.h index 4e40080a64..241ff02cc4 100644 --- a/rom/dos/dos_intern.h +++ b/rom/dos/dos_intern.h @@ -321,7 +321,7 @@ void freepacketinfo(struct DosLibrary *DOSBase, struct PacketHelperStruct*); struct FileLock *fl = BADDR(lock); \ if (fl && fl->fl_Access != SHARED_LOCK && fl->fl_Access != EXCLUSIVE_LOCK) { \ bug("%s() bogus FileLock! '%s' %x %d %s/%s/%d\n", \ - __FUNCTION__, SysBase->ThisTask->tc_Node.ln_Name, fl, fl->fl_Access, __FILE__,__FUNCTION__,__LINE__); \ + __FUNCTION__, FindTask(NULL)->tc_Node.ln_Name, fl, fl->fl_Access, __FILE__,__FUNCTION__,__LINE__); \ } \ } while (0); diff --git a/rom/filesys/pfs3/fs/ks13wrapper.c b/rom/filesys/pfs3/fs/ks13wrapper.c index d9c119b3e7..e2bcbff3ac 100644 --- a/rom/filesys/pfs3/fs/ks13wrapper.c +++ b/rom/filesys/pfs3/fs/ks13wrapper.c @@ -187,7 +187,7 @@ struct MsgPort *W_CreateMsgPort(struct globaldata *g) ret->mp_Node.ln_Type = NT_MSGPORT; NEWLIST(&ret->mp_MsgList); ret->mp_SigBit=sb; - ret->mp_SigTask=SysBase->ThisTask; + ret->mp_SigTask=FindTask(NULL); return ret; } FreeMem(ret,sizeof(struct MsgPort)); diff --git a/rom/graphics/fakegfxhidd.c b/rom/graphics/fakegfxhidd.c index 5253ad6d86..89727b7194 100644 --- a/rom/graphics/fakegfxhidd.c +++ b/rom/graphics/fakegfxhidd.c @@ -90,7 +90,7 @@ static void FakeGfxHidd_ObtainSemaphore(struct SignalSemaphore *sigSem, BOOL urg struct Task *me; /* Get pointer to current task */ - me=SysBase->ThisTask; + me=FindTask(NULL); /* Arbitrate for the semaphore structure */ Forbid(); diff --git a/rom/intuition/lockpubscreen.c b/rom/intuition/lockpubscreen.c index 821e0df9eb..9900f86e28 100644 --- a/rom/intuition/lockpubscreen.c +++ b/rom/intuition/lockpubscreen.c @@ -77,9 +77,10 @@ static struct PubScreenNode *findcasename(struct List *list, const UBYTE *name); DEBUG_LOCKPUBSCREEN(dprintf("LockPubScreen: name <%s>\n", name ? name : (CONST_STRPTR)"NULL")); - DEBUG_LOCKPUBSCREEN(dprintf("LockPubScreen: task %p <%s>\n", - SysBase->ThisTask, - SysBase->ThisTask->tc_Node.ln_Name ? SysBase->ThisTask->tc_Node.ln_Name : "NULL")); + DEBUG_LOCKPUBSCREEN({struct Task *t = FindTask(NULL); + dprintf("LockPubScreen: task %p <%s>\n", + t, + t->tc_Node.ln_Name ? t->tc_Node.ln_Name : "NULL");}); list = LockPubScreenList(); diff --git a/rom/intuition/unlockpubscreen.c b/rom/intuition/unlockpubscreen.c index 8bd08eb40d..3fdce960e9 100644 --- a/rom/intuition/unlockpubscreen.c +++ b/rom/intuition/unlockpubscreen.c @@ -58,9 +58,10 @@ static struct PubScreenNode *findcasename(struct List *list, const UBYTE *name); DEBUG_UNLOCKPUBSCREEN(dprintf("UnlockPubScreen: name <%s> screen %p\n", name ? (const char *)name : "NULL", screen)); - DEBUG_UNLOCKPUBSCREEN(dprintf("LockPubScreen: task %p <%s>\n", - SysBase->ThisTask, - SysBase->ThisTask->tc_Node.ln_Name ? SysBase->ThisTask->tc_Node.ln_Name : "NULL")); + DEBUG_UNLOCKPUBSCREEN({struct Task *t = FindTask(NULL); + dprintf("LockPubScreen: task %p <%s>\n", + t, + t->tc_Node.ln_Name ? t->tc_Node.ln_Name : "NULL")); publist = LockPubScreenList(); diff --git a/test/exceptiontest.c b/test/exceptiontest.c index ce59bb9f03..67c942f305 100644 --- a/test/exceptiontest.c +++ b/test/exceptiontest.c @@ -7,6 +7,7 @@ #include #include #include +#include #include ULONG s; @@ -41,13 +42,14 @@ int main(void) s2=AllocSignal(-1); if(s2>=0) { + struct Task *task = FindTask(NULL); printf("sig2: %d\n",s2); - oldexc=SysBase->ThisTask->tc_ExceptCode; - SysBase->ThisTask->tc_ExceptCode=&AROS_SLIB_ENTRY(handler,Test,0); + oldexc=task->tc_ExceptCode; + task->tc_ExceptCode=&AROS_SLIB_ENTRY(handler,Test,0); SetExcept(1<ThisTask,(1<ThisTask->tc_ExceptCode=oldexc; + task->tc_ExceptCode=oldexc; printf("got: %08lx\n",(unsigned long)s); FreeSignal(s2); } diff --git a/test/exec/tasktest.c b/test/exec/tasktest.c index be626fe80a..8b98481755 100644 --- a/test/exec/tasktest.c +++ b/test/exec/tasktest.c @@ -42,7 +42,7 @@ int main(int argc, char* argv[]) { struct Task *t; - parent=SysBase->ThisTask; + parent=FindTask(NULL); sigbit1=AllocSignal(-1); if(sigbit1>=0) diff --git a/test/exec/tasktest2.c b/test/exec/tasktest2.c index e3640b4257..d6ef012296 100644 --- a/test/exec/tasktest2.c +++ b/test/exec/tasktest2.c @@ -42,7 +42,7 @@ int main(int argc, char* argv[]) { struct Task *t; - parent=SysBase->ThisTask; + parent=FindTask(NULL); sigbit1=AllocSignal(-1); if(sigbit1>=0) diff --git a/workbench/c/TaskList.c b/workbench/c/TaskList.c index 6c24133002..8b558b0de8 100644 --- a/workbench/c/TaskList.c +++ b/workbench/c/TaskList.c @@ -120,7 +120,7 @@ static int fillbuffer(struct task **buffer, IPTR size) STRPTR end=(STRPTR)*buffer+size; struct Task *task; Disable(); - if(!addtask(SysBase->ThisTask,buffer,&end)) + if(!addtask(FindTask(NULL),buffer,&end)) { Enable(); return 0; diff --git a/workbench/devs/AHI/Drivers/Device/device-playslave.c b/workbench/devs/AHI/Drivers/Device/device-playslave.c index 6c18b30a96..fc724757a5 100644 --- a/workbench/devs/AHI/Drivers/Device/device-playslave.c +++ b/workbench/devs/AHI/Drivers/Device/device-playslave.c @@ -62,7 +62,7 @@ Slave( struct ExecBase* SysBase ) /* Note that in OS4, we cannot call FindTask(NULL) here, since IExec * is inside AHIsubBase! */ - AudioCtrl = (struct AHIAudioCtrlDrv*) SysBase->ThisTask->tc_UserData; + AudioCtrl = (struct AHIAudioCtrlDrv*) FindTask(NULL)->tc_UserData; AHIsubBase = (struct DriverBase*) dd->ahisubbase; DeviceBase = (struct DeviceBase*) AHIsubBase; diff --git a/workbench/devs/AHI/Drivers/Filesave/filesave-playslave.c b/workbench/devs/AHI/Drivers/Filesave/filesave-playslave.c index 39c231e0b6..e7b98262f1 100644 --- a/workbench/devs/AHI/Drivers/Filesave/filesave-playslave.c +++ b/workbench/devs/AHI/Drivers/Filesave/filesave-playslave.c @@ -237,7 +237,7 @@ static void PlaySlave( struct ExecBase* SysBase ) /* Note that in OS4, we cannot call FindTask(NULL) here, since IExec * is inside AHIsubBase! */ - AudioCtrl = (struct AHIAudioCtrlDrv*) SysBase->ThisTask->tc_UserData; + AudioCtrl = (struct AHIAudioCtrlDrv*) FindTask(NULL)->tc_UserData; AHIsubBase = (struct DriverBase*) dd->fs_AHIsubBase; FilesaveBase = (struct FilesaveBase*) AHIsubBase; diff --git a/workbench/devs/AHI/Drivers/Filesave/filesave-recslave.c b/workbench/devs/AHI/Drivers/Filesave/filesave-recslave.c index 15709c8295..9bd5f00a7e 100644 --- a/workbench/devs/AHI/Drivers/Filesave/filesave-recslave.c +++ b/workbench/devs/AHI/Drivers/Filesave/filesave-recslave.c @@ -72,7 +72,7 @@ static void RecSlave( struct ExecBase* SysBase ) /* Note that in OS4, we cannot call FindTask(NULL) here, since IExec * is inside AHIsubBase! */ - AudioCtrl = (struct AHIAudioCtrlDrv*) SysBase->ThisTask->tc_UserData; + AudioCtrl = (struct AHIAudioCtrlDrv*) FindTask(NULL)->tc_UserData; AHIsubBase = (struct DriverBase*) dd->fs_AHIsubBase; FilesaveBase = (struct FilesaveBase*) AHIsubBase; diff --git a/workbench/devs/AHI/Drivers/Void/void-playslave.c b/workbench/devs/AHI/Drivers/Void/void-playslave.c index 6785a3688f..a816393742 100644 --- a/workbench/devs/AHI/Drivers/Void/void-playslave.c +++ b/workbench/devs/AHI/Drivers/Void/void-playslave.c @@ -53,7 +53,7 @@ Slave( struct ExecBase* SysBase ) /* Note that in OS4, we cannot call FindTask(NULL) here, since IExec * is inside AHIsubBase! */ - AudioCtrl = (struct AHIAudioCtrlDrv*) SysBase->ThisTask->tc_UserData; + AudioCtrl = (struct AHIAudioCtrlDrv*) FindTask(NULL)->tc_UserData; AHIsubBase = (struct DriverBase*) dd->ahisubbase; VoidBase = (struct VoidBase*) AHIsubBase; diff --git a/workbench/network/stacks/AROSTCP/bsdsocket/api/amiga_api.c b/workbench/network/stacks/AROSTCP/bsdsocket/api/amiga_api.c index 23c97ae0ed..f3c80a8549 100644 --- a/workbench/network/stacks/AROSTCP/bsdsocket/api/amiga_api.c +++ b/workbench/network/stacks/AROSTCP/bsdsocket/api/amiga_api.c @@ -160,7 +160,7 @@ D(bug("[AROSTCP](amiga_api.c) ELL_Open()\n[AROSTCP](amiga_api.c) ELL_Open: versi * One task may open socket library more than once. In that case caller * receives the base it has opened already. */ - if ((newBase = FindSocketBase(SysBase->ThisTask)) != NULL) { + if ((newBase = FindSocketBase(FindTask(NULL))) != NULL) { newBase->libNode.lib_OpenCnt++; return (struct Library *)newBase; } @@ -215,7 +215,7 @@ D(bug("[AROSTCP](amiga_api.c) ELL_Open: Created user library base @ 0x%p\n", new newBase->libNode.lib_OpenCnt = 1; newBase->errnoPtr = (VOID *)&newBase->defErrno; newBase->errnoSize = sizeof newBase->defErrno; - newBase->thisTask = SysBase->ThisTask; + newBase->thisTask = FindTask(NULL); newBase->sigIntrMask = SIGBREAKF_CTRL_C; /* initialize syslog variables */ diff --git a/workbench/network/stacks/AROSTCP/bsdsocket/api/amiga_libcallentry.h b/workbench/network/stacks/AROSTCP/bsdsocket/api/amiga_libcallentry.h index 4c564ca87e..984f53ad02 100644 --- a/workbench/network/stacks/AROSTCP/bsdsocket/api/amiga_libcallentry.h +++ b/workbench/network/stacks/AROSTCP/bsdsocket/api/amiga_libcallentry.h @@ -48,8 +48,8 @@ extern const char wrongTaskErrorFmt[]; #define CHECK_TASK() \ - if (libPtr->thisTask != SysBase->ThisTask) { \ - struct Task * wTask = SysBase->ThisTask; \ + if (libPtr->thisTask != FindTask(NULL)) { \ + struct Task * wTask = FindTask(NULL); \ __log(LOG_CRIT, wrongTaskErrorFmt, wTask, \ wTask->tc_Node.ln_Name, libPtr->thisTask, \ libPtr->thisTask->tc_Node.ln_Name); \ @@ -57,8 +57,8 @@ extern const char wrongTaskErrorFmt[]; } #define CHECK_TASK_NULL() \ - if (libPtr->thisTask != SysBase->ThisTask) { \ - struct Task * wTask = SysBase->ThisTask; \ + if (libPtr->thisTask != FindTask(NULL)) { \ + struct Task * wTask = FindTask(NULL); \ __log(LOG_CRIT, wrongTaskErrorFmt, wTask, \ wTask->tc_Node.ln_Name, libPtr->thisTask, \ libPtr->thisTask->tc_Node.ln_Name); \ @@ -68,8 +68,8 @@ extern const char wrongTaskErrorFmt[]; #define CHECK_TASK2() CHECK_TASK_NULL() #define CHECK_TASK_VOID() \ - if (libPtr->thisTask != SysBase->ThisTask) { \ - struct Task * wTask = SysBase->ThisTask; \ + if (libPtr->thisTask != FindTask(NULL) { \ + struct Task * wTask = FindTask(NULL); \ __log(LOG_CRIT, wrongTaskErrorFmt, wTask, \ wTask->tc_Node.ln_Name, libPtr->thisTask, \ libPtr->thisTask->tc_Node.ln_Name); \ diff --git a/workbench/network/stacks/AROSTCP/bsdsocket/kern/kern_synch.c b/workbench/network/stacks/AROSTCP/bsdsocket/kern/kern_synch.c index 647a615502..dc8d20ebbb 100644 --- a/workbench/network/stacks/AROSTCP/bsdsocket/kern/kern_synch.c +++ b/workbench/network/stacks/AROSTCP/bsdsocket/kern/kern_synch.c @@ -327,7 +327,7 @@ D(bug("[AROSTCP](kern_synch.c) tsleep()\n")); #endif #if DIAGNOSTIC - if (SysBase->ThisTask != syscall_semaphore.ss_Owner) { + if (FindTask(NULL) != syscall_semaphore.ss_Owner) { log(LOG_ERR, "tsleep() called with NO syscall_semaphore!"); return (-1); } diff --git a/workbench/network/stacks/AROSTCP/netlib/chmod.c b/workbench/network/stacks/AROSTCP/netlib/chmod.c index f425b5b600..2ae27063f8 100644 --- a/workbench/network/stacks/AROSTCP/netlib/chmod.c +++ b/workbench/network/stacks/AROSTCP/netlib/chmod.c @@ -149,6 +149,7 @@ int chmod(const char *path, mode_t mode) #ifdef DEBUGGING #include +#include #include #include #include @@ -164,7 +165,7 @@ const static char usage[] = "usage: chmod [-fR] mode file ..."; void main(int argc, char *argv[]) { - struct Process *p = (struct Process *)SysBase->ThisTask; + struct Process *p = (struct Process *)FindTask(NULL); BPTR Stderr = p->pr_CES ? p->pr_CES : p->pr_COS; short perrors = 1, recursive = 0; diff --git a/workbench/network/stacks/AROSTCP/netlib/chown.c b/workbench/network/stacks/AROSTCP/netlib/chown.c index 839058ea4a..8f23ec19c5 100644 --- a/workbench/network/stacks/AROSTCP/netlib/chown.c +++ b/workbench/network/stacks/AROSTCP/netlib/chown.c @@ -119,6 +119,7 @@ int chown(const char *name, uid_t uid, gid_t gid) #ifdef DEBUGGING #include +#include #include #include #include @@ -131,7 +132,7 @@ const static char usage[] = "usage: chown [-fR] owner[:group] file ..."; void main(int argc, char *argv[]) { - struct Process *p = (struct Process *)SysBase->ThisTask; + struct Process *p = (struct Process *)FindTask(NULL); BPTR Stderr = p->pr_CES ? p->pr_CES : p->pr_COS; short perrors = 1, recursive = 0; diff --git a/workbench/network/stacks/AROSTCP/netlib/dosio_init.c b/workbench/network/stacks/AROSTCP/netlib/dosio_init.c index eb07cd5a21..6ddc788884 100644 --- a/workbench/network/stacks/AROSTCP/netlib/dosio_init.c +++ b/workbench/network/stacks/AROSTCP/netlib/dosio_init.c @@ -12,6 +12,7 @@ extern struct ExecBase *SysBase; #include #include +#include #if __SASC #include @@ -90,7 +91,7 @@ BPTR __dosio_files[3]; long __stdargs _STI_500_dosio_init(void) { - struct Process *p = (struct Process *)SysBase->ThisTask; + struct Process *p = (struct Process *)FindTask(NULL); __dosio_files[0] = p->pr_CIS; /* stdin */ __dosio_files[1] = p->pr_COS; /* stdout */ diff --git a/workbench/network/stacks/AROSTCP/netlib/printfault.c b/workbench/network/stacks/AROSTCP/netlib/printfault.c index 03f58fc4c3..0d6dfa3270 100644 --- a/workbench/network/stacks/AROSTCP/netlib/printfault.c +++ b/workbench/network/stacks/AROSTCP/netlib/printfault.c @@ -44,11 +44,12 @@ extern struct ExecBase *SysBase; #include #include +#include void PrintNetFault(LONG code, const UBYTE *banner) { - struct Process *p = (struct Process *)SysBase->ThisTask; + struct Process *p = (struct Process *)FindTask(NULL); BPTR Stderr = p->pr_CES ? p->pr_CES : p->pr_COS; const UBYTE *err = strerror(errno); diff --git a/workbench/network/stacks/AROSTCP/netlib/printuserfault.c b/workbench/network/stacks/AROSTCP/netlib/printuserfault.c index afcf78e81d..09fecf948a 100644 --- a/workbench/network/stacks/AROSTCP/netlib/printuserfault.c +++ b/workbench/network/stacks/AROSTCP/netlib/printuserfault.c @@ -45,10 +45,11 @@ extern struct ExecBase *SysBase; #include #include #include +#include void PrintUserFault(LONG code, const UBYTE *banner) { - struct Process *p = (struct Process *)SysBase->ThisTask; + struct Process *p = (struct Process *)FindTask(NULL); BPTR Stderr = p->pr_CES ? p->pr_CES : p->pr_COS; if (banner != NULL) { diff --git a/workbench/system/Snoopy/main.c b/workbench/system/Snoopy/main.c index 5102f4ee38..75fffb3152 100644 --- a/workbench/system/Snoopy/main.c +++ b/workbench/system/Snoopy/main.c @@ -67,7 +67,7 @@ void main_output(CONST_STRPTR action, CONST_STRPTR target, CONST_STRPTR option, { char pathbuf[MAX_STR_LEN+1]; - struct Task *thistask = SysBase->ThisTask; + struct Task *thistask = FindTask(NULL); STRPTR name = thistask->tc_Node.ln_Name; if (setup.onlyShowFails && result) return; diff --git a/workbench/system/Snoopy/patches.c b/workbench/system/Snoopy/patches.c index d0f0d7d796..88a5858c1d 100644 --- a/workbench/system/Snoopy/patches.c +++ b/workbench/system/Snoopy/patches.c @@ -386,7 +386,7 @@ AROS_LH3(LONG, New_MakeLink, if (patches[PATCH_MakeLink].enabled) { - struct Process *myproc = (struct Process *)SysBase->ThisTask; + struct Process *myproc = (struct Process *)FindTask(NULL); CONST_STRPTR opt; if (soft) opt = "Softlink"; @@ -1137,7 +1137,7 @@ void GetVolName(BPTR lock, char *buf, int maxlen) */ char *MyNameFromLock(BPTR lock, char *filename, char *buf, int maxlen) { - struct Process *myproc = (struct Process *)SysBase->ThisTask; + struct Process *myproc = (struct Process *)FindTask(NULL); int pos = maxlen - 1; D_S(fib, struct FileInfoBlock); LONG savedioerr = IoErr(); -- 2.11.4.GIT