set_errno: only if there is a tf
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 9 Jun 2010 20:59:46 +0000 (13:59 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:48 +0000 (17:35 -0700)
Some paths (like async calls) might not have a current_tf when they call
set_errno.  Eventually, we'll need a way to propagate the errors back,
and perhaps current_tf isn't the right way.  For now, this will avoid
null ptr dereferences while keeping the calling code clean.

kern/arch/i686/trap.h
kern/arch/sparc/trap.h

index fd00892..39ea036 100644 (file)
@@ -64,7 +64,8 @@ extern taskstate_t ts;
 
 static inline void set_errno(trapframe_t* tf, uint32_t errno)
 {
-       tf->tf_regs.reg_esi = errno;
+       if (tf)
+               tf->tf_regs.reg_esi = errno;
 }
 
 /* Determines if the given TF was in the kernel or not. */
index 069dbc7..f6cf003 100644 (file)
@@ -23,7 +23,8 @@ void emulate_fpu(trapframe_t* state, ancillary_state_t* astate);
 
 static inline void set_errno(trapframe_t* tf, uint32_t errno)
 {
-       tf->gpr[9] = errno;
+       if (tf)
+               tf->gpr[9] = errno;
 }
 
 static inline bool in_kernel(struct trapframe *tf)