Browse Source

fix: tls_desc32 may not be correctly copied

greatbridf 9 tháng trước cách đây
mục cha
commit
4f18b18088
1 tập tin đã thay đổi với 5 bổ sung1 xóa
  1. 5 1
      src/kernel/task/thread.cc

+ 5 - 1
src/kernel/task/thread.cc

@@ -32,7 +32,7 @@ thread::thread(std::string name, pid_t owner)
     : owner { owner }, attr { READY | SYSTEM }, name { name } { }
 
 thread::thread(const thread& val, pid_t owner)
-    : owner { owner }, attr { val.attr }, name { val.name } { }
+    : owner { owner }, attr { val.attr }, name { val.name }, tls_desc32{val.tls_desc32} { }
 
 tid_t thread::tid() const
 {
@@ -171,6 +171,10 @@ int thread::set_thread_area(kernel::user::user_desc* ptr)
     if (!ptr->seg_32bit)
         return -1;
 
+    if ((ptr->limit & 0xffff) != 0xffff) {
+        asm volatile("nop": : : "memory");
+    }
+
     tls_desc32  = ptr->limit & 0x0'ffff;
     tls_desc32 |= (ptr->base_addr & 0x00'ffffffULL) << 16;
     tls_desc32 |= 0x4'0'f2'000000'0000;