summaryrefslogtreecommitdiff
path: root/debian/patches/bootshell0009-fixup-more-error-handling.patch
blob: 72d9a3a192c0cf9d22f8419989dfc9d6a03ec216 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
From e88a341c9d13e5eac93b57890a980ded742aa8d4 Mon Sep 17 00:00:00 2001
From: Justus Winter <4winter@informatik.uni-hamburg.de>
Date: Mon, 9 Mar 2015 20:51:21 +0100
Subject: [PATCH hurd 09/10] fixup more error handling

---
 bootshell/elf-exec.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/bootshell/elf-exec.c b/bootshell/elf-exec.c
index c8a8e14..a61addb 100644
--- a/bootshell/elf-exec.c
+++ b/bootshell/elf-exec.c
@@ -117,7 +117,10 @@ boot_script_exec_cmd (mach_port_t task, char *path, int argc,
   arg_len += 5 * sizeof (int);
   stack_end = VM_MAX_ADDRESS;
   stack_start = VM_MAX_ADDRESS - 16 * 1024 * 1024;
-  vm_allocate (task, &stack_start, stack_end - stack_start, FALSE);
+  err = vm_allocate (task, &stack_start, stack_end - stack_start, FALSE);
+  if (err)
+    return err;
+
   arg_pos = (void *) ((stack_end - arg_len) & ~(sizeof (natural_t) - 1));
   args = mmap (0, stack_end - trunc_page ((vm_offset_t) arg_pos),
 	       PROT_READ|PROT_WRITE, MAP_ANON, 0, 0);
@@ -137,12 +140,16 @@ boot_script_exec_cmd (mach_port_t task, char *path, int argc,
   p = (void *) p + sizeof (char *);
   memcpy (p, strings, stringlen);
   memset (args, 0, (vm_offset_t)arg_pos & (vm_page_size - 1));
-  vm_write (task, trunc_page ((vm_offset_t) arg_pos), (vm_address_t) args,
-	    stack_end - trunc_page ((vm_offset_t) arg_pos));
+  err = vm_write (task, trunc_page ((vm_offset_t) arg_pos), (vm_address_t) args,
+                  stack_end - trunc_page ((vm_offset_t) arg_pos));
+  if (err)
+    return err;
   munmap ((caddr_t) args,
 	  stack_end - trunc_page ((vm_offset_t) arg_pos));
 
-  thread_create (task, &thread);
+  err = thread_create (task, &thread);
+  if (err)
+    return err;
 
 #ifdef i386_THREAD_STATE_COUNT
   {
@@ -152,8 +159,10 @@ boot_script_exec_cmd (mach_port_t task, char *path, int argc,
 		      (thread_state_t) &regs, &reg_size);
     regs.eip = (int) startpc;
     regs.uesp = (int) arg_pos;
-    thread_set_state (thread, i386_THREAD_STATE,
-		      (thread_state_t) &regs, reg_size);
+    err = thread_set_state (thread, i386_THREAD_STATE,
+                            (thread_state_t) &regs, reg_size);
+    if (err)
+      return err;
   }
 #else
 # error needs to be ported
@@ -177,6 +186,8 @@ elf_exec (mach_port_t task, char *argz, size_t argz_len)
 
   argc = argz_count (argz, argz_len);
   argv = malloc ((argc + 1) * sizeof *argv);
+  if (argv == NULL)
+    return ENOMEM;
   argz_extract (argz, argz_len, argv);
 
   err = boot_script_exec_cmd (task, argz, argc, argv, argz, argz_len);
-- 
2.1.4