|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: vfscore_put_fd: do not reject fd <= 2
Rejecting fd <= 2 is legitimate in some way, since freeing std(in|out|err)
might lead to crash if .f_count is 1. This is because stdin, stdout and stderr
fps are statically allocated. However, returning -EBUSY in this case breaks
dup2 with stdin, out, and err. Ignoring this should be fine as long as those
are not fdrop-ed twice.
Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@xxxxxxxxx>
---
lib/vfscore/fd.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/lib/vfscore/fd.c b/lib/vfscore/fd.c
index 6b7f5ec..684ea50 100644
--- a/lib/vfscore/fd.c
+++ b/lib/vfscore/fd.c
@@ -97,9 +97,15 @@ int vfscore_put_fd(int fd)
unsigned long flags;
UK_ASSERT(fd < (int) FDTABLE_MAX_FILES);
- /* Currently it is not allowed to free std(in|out|err) */
- if (fd <= 2)
- return -EBUSY;
+
+ /* FIXME Currently it is not allowed to free std(in|out|err):
+ * if (fd <= 2) return -EBUSY;
+ *
+ * However, returning -EBUSY in this case breaks dup2 with stdin, out,
+ * err. Ignoring this should be fine as long as those are not fdrop-ed
+ * twice, in which case the static fp would be freed, and here be
+ * dragons.
+ */
flags = ukplat_lcpu_save_irqf();
uk_bitmap_clear(fdtable.bitmap, fd, 1);
--
2.7.4
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |