On Fri, 31 Dec 2021, RVP wrote:

OP: Try this patch:

---START---
diff -u screen-4.8.0{.orig,}/screen.c --- screen-4.8.0.orig/screen.c 2020-02-05 20:09:38.000000000 +0000
+++ screen-4.8.0/screen.c       2021-12-31 01:56:30.470670972 +0000
@@ -1801,6 +1801,10 @@
    struct win *p = windows;
    windows = windows->w_next;
    FreeWindow(p);
+    if (p->w_pid > 0) {
+      debug1("Hangup(%d);\n", p->w_pid);
+      killpg(p->w_pid, SIGHUP);
+    }
  }

  if (ServerSocket != -1) {
---END---


I goofed that (use-after-free). Try this one please:

---START---
diff -urN screen-4.8.0.orig/screen.c screen-4.8.0/screen.c
--- screen-4.8.0.orig/screen.c  2021-12-31 03:27:41.988827000 +0000
+++ screen-4.8.0/screen.c       2021-12-31 03:26:47.995416000 +0000
@@ -1801,8 +1801,13 @@
   debug1("Finit(%d);\n", i);
   while (windows) {
     struct win *p = windows;
+    pid_t pid = p->w_pid;
     windows = windows->w_next;
     FreeWindow(p);
+    if (pid > 0) {
+      debug1("Hangup(%d);\n", pid);
+      killpg(pid, SIGHUP);
+    }
   }

   if (ServerSocket != -1) {
---END---

-RVP

Reply via email to