diff --git a/package/system/opkg/Makefile b/package/system/opkg/Makefile
index 67ceb7cafc23616bd95d08c92cf7e26b606d8132..446463ec85c1f53c6488141164281cfb80a3800e 100644
--- a/package/system/opkg/Makefile
+++ b/package/system/opkg/Makefile
@@ -109,7 +109,7 @@ endef
 
 Package/opkg-smime/conffiles = $(Package/opkg/conffiles)
 
-TARGET_CFLAGS += -ffunction-sections -fdata-sections
+TARGET_CFLAGS += -ffunction-sections -fdata-sections -DOPKG_USE_VFORK=1
 EXTRA_CFLAGS += $(TARGET_CPPFLAGS)
 
 CONFIGURE_ARGS += \
diff --git a/package/system/opkg/patches/280-use-vfork.patch b/package/system/opkg/patches/280-use-vfork.patch
index 1c46f52b020c675734d9d7947c89ad37febef63d..fc6058a701f7b459c41fbc7ef68cb18ae0e194ac 100644
--- a/package/system/opkg/patches/280-use-vfork.patch
+++ b/package/system/opkg/patches/280-use-vfork.patch
@@ -1,20 +1,25 @@
 --- a/libbb/gz_open.c
 +++ b/libbb/gz_open.c
-@@ -29,7 +29,7 @@
+@@ -29,7 +29,12 @@
  #include <unistd.h>
  #include "libbb.h"
  
--static int gz_use_vfork;
-+static const int gz_use_vfork = 1;
++#ifdef OPKG_USE_VFORK
++static const int gz_use_vfork = OPKG_USE_VFORK;
++#else
+ static int gz_use_vfork;
++#endif
++
  
  FILE *
  gz_open(FILE *compressed_file, int *pid)
-@@ -38,8 +38,6 @@ gz_open(FILE *compressed_file, int *pid)
+@@ -38,7 +43,9 @@ gz_open(FILE *compressed_file, int *pid)
  	off_t floc;
  	int cfile = -1;
  
--	gz_use_vfork = (getenv("OPKG_USE_VFORK") != NULL);
--
++#ifndef OPKG_USE_VFORK
+ 	gz_use_vfork = (getenv("OPKG_USE_VFORK") != NULL);
++#endif
+ 
  	if (gz_use_vfork) {
  		/* Create a new file descriptor for the input stream
- 		 * (it *must* be associated with a file), and lseek()