[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Lost] [Patch] LostIO: Checks in io_write



Vermutlich hält LostIO noch genug ähnliche Kaputtheiten auf Lager, aber vterm sollte _wirklich_ nicht abstürzen, wenn man ein Programm laufen läßt, das gegen eine ältere ABI gebaut ist.

Ich spende für den Anfang einen Nullpointer- und einen Pufferlängencheck.
Index: src/modules/lib/lostio/handler.c
===================================================================
--- src/modules/lib/lostio/handler.c	(Revision 606)
+++ src/modules/lib/lostio/handler.c	(Arbeitskopie)
@@ -225,10 +225,24 @@
         void* write_data;
         if (write_request->shared_mem_id == 0) {
             write_data = write_request->data;
-        } else {
+
+            // Laenge pruefen
+            if (write_request->blocksize * write_request->blockcount >
+                data_size - offsetof(io_write_request_t, data))
+            {
+                rpc_send_dword_response(pid, correlation_id, (dword)-1);
+                return;
+            }
+        } else {        
             write_data = open_shared_memory(write_request->shared_mem_id);
+            // TODO Groesse des Puffers pruefen
         }
 
+        if (write_data == NULL) {
+            rpc_send_dword_response(pid, correlation_id, (dword)-1);
+            return;
+        }
+
         size_t result = typehandle->write(filehandle, write_request->blocksize, write_request->blockcount, write_data);
 
         if (write_request->shared_mem_id != 0) {