nfs-kernel-server: update to v2.6.2
authorOskari Rauta <oskari.rauta@gmail.com>
Wed, 22 Feb 2023 16:38:26 +0000 (16:38 +0000)
committerTianling Shen <cnsztl@gmail.com>
Wed, 1 Mar 2023 09:02:42 +0000 (17:02 +0800)
Also added patch that is from alpine's same package to assist building on musl.
Hostpkg build on musl also kept failing, so I added few more overrides, which
made it work perfectly.

Signed-off-by: Oskari Rauta <oskari.rauta@gmail.com>
net/nfs-kernel-server/Makefile
net/nfs-kernel-server/patches/110-move-hardcoded-rundir.patch
net/nfs-kernel-server/patches/130-musl-svcgssd-sysconf.patch [new file with mode: 0644]
net/nfs-kernel-server/patches/200-fix-macos-build.patch

index 01f19ba03c39ac5ed60f77924eb4755e8bd01204..c7a3a1f57bf8c8f672b2a33352bbcbda9e8d4dca 100644 (file)
@@ -7,9 +7,9 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nfs-kernel-server
-PKG_VERSION:=2.5.4
-PKG_RELEASE:=5
-PKG_HASH:=546ce4b51eeebc66e354b6cc6ca0ce509437efbdef0caaf99389534eef0e598b
+PKG_VERSION:=2.6.2
+PKG_RELEASE:=1
+PKG_HASH:=26d46448982252e9e2c8346d10cf13e1143e7089c866f53e25db3359f3e9493c
 
 PKG_SOURCE_URL:=@SF/nfs
 PKG_SOURCE:=nfs-utils-$(PKG_VERSION).tar.xz
@@ -150,6 +150,9 @@ HOST_CONFIGURE_VARS += \
        ac_cv_header_blkid_blkid_h=yes \
        ac_cv_lib_resolv___res_querydomain=yes \
        ac_cv_func_prctl=yes \
+       ac_cv_sizeof_size_t=0 \
+       ac_cv_func_getrpcbynumber=yes \
+       ac_cv_func_getrpcbynumber_r=yes \
        enable_ipv6=no \
        GSSGLUE_CFLAGS=" " \
        GSSGLUE_LIBS=" " \
index d78be697482becbbd726d2c0be2b3cb0da080bd9..fa097fb47d8aab75e98a53af55e1f6f0ef56f3eb 100644 (file)
@@ -3,7 +3,7 @@
 @@ -64,7 +64,7 @@
  #define EVENT_BUFSIZE (1024 * EVENT_SIZE)
  
- #define RPCPIPE_DIR   "/var/lib/nfs/rpc_pipefs"
+ #define RPCPIPE_DIR   NFS_STATEDIR "/rpc_pipefs"
 -#define PID_FILE      "/run/blkmapd.pid"
 +#define PID_FILE      "/tmp/run/blkmapd.pid"
  
diff --git a/net/nfs-kernel-server/patches/130-musl-svcgssd-sysconf.patch b/net/nfs-kernel-server/patches/130-musl-svcgssd-sysconf.patch
new file mode 100644 (file)
index 0000000..a498e39
--- /dev/null
@@ -0,0 +1,144 @@
+--- a/support/nfsidmap/libnfsidmap.c
++++ b/support/nfsidmap/libnfsidmap.c
+@@ -452,11 +452,17 @@ int nfs4_init_name_mapping(char *conffil
+       nobody_user = conf_get_str("Mapping", "Nobody-User");
+       if (nobody_user) {
+-              size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++              long scbuflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++              size_t buflen = 1024; /*value on my gentoo glibc system that has _SC_GETPW_R_SIZE_MAX*/
+               struct passwd *buf;
+               struct passwd *pw = NULL;
+               int err;
++              /*sysconf can return -1 when _SC_GETPW_R_SIZE_MAX is not defined, like on musl systems, if cast to size_t this will lead
++                to an integer overflow, which leads to a buffer overflow and crashes svcgssd */
++              if (scbuflen > 0)
++                      buflen = (size_t)scbuflen;
++
+               buf = malloc(sizeof(*buf) + buflen);
+               if (buf) {
+                       err = getpwnam_r(nobody_user, buf, ((char *)buf) + sizeof(*buf), buflen, &pw);
+@@ -473,11 +479,17 @@ int nfs4_init_name_mapping(char *conffil
+       nobody_group = conf_get_str("Mapping", "Nobody-Group");
+       if (nobody_group) {
+-              size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++              long scbuflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++              size_t buflen = 1024; /*value on my gentoo glibc system that has _SC_GETGR_R_SIZE_MAX*/
+               struct group *buf;
+               struct group *gr = NULL;
+               int err;
++              /*sysconf can return -1 when _SC_GETGR_R_SIZE_MAX is not defined, like on musl systems, if cast to size_t this will lead
++                to an integer overflow, which leads to a buffer overflow and crashes svcgssd */
++              if (scbuflen > 0)
++                      buflen = (size_t)scbuflen;
++
+               buf = malloc(sizeof(*buf) + buflen);
+               if (buf) {
+                       err = getgrnam_r(nobody_group, buf, ((char *)buf) + sizeof(*buf), buflen, &gr);
+--- a/support/nfsidmap/static.c
++++ b/support/nfsidmap/static.c
+@@ -98,10 +98,14 @@ static struct passwd *static_getpwnam(co
+ {
+       struct passwd *pw;
+       struct pwbuf *buf;
+-      size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++      long scbuflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++      size_t buflen = 1024;
+       char *localname;
+       int err;
++      if (scbuflen > 0)
++              buflen = (size_t)scbuflen;
++
+       buf = malloc(sizeof(*buf) + buflen);
+       if (!buf) {
+               err = ENOMEM;
+@@ -149,10 +153,14 @@ static struct group *static_getgrnam(con
+ {
+       struct group *gr;
+       struct grbuf *buf;
+-      size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++      long scbuflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++      size_t buflen = 1024;
+       char *localgroup;
+       int err;
++      if (scbuflen > 0)
++              buflen = (size_t)scbuflen;
++
+       buf = malloc(sizeof(*buf) + buflen);
+       if (!buf) {
+               err = ENOMEM;
+--- a/support/nfsidmap/nss.c
++++ b/support/nfsidmap/nss.c
+@@ -91,9 +91,13 @@ static int nss_uid_to_name(uid_t uid, ch
+       struct passwd *pw = NULL;
+       struct passwd pwbuf;
+       char *buf;
+-      size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++      long scbuflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++      size_t buflen = 1024;
+       int err = -ENOMEM;
++      if (scbuflen > 0)
++              buflen = (size_t)scbuflen;
++
+       buf = malloc(buflen);
+       if (!buf)
+               goto out;
+@@ -119,9 +123,13 @@ static int nss_gid_to_name(gid_t gid, ch
+       struct group *gr = NULL;
+       struct group grbuf;
+       char *buf;
+-      size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++      long scbuflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++      size_t buflen = 1024;
+       int err;
++      if (scbuflen > 0)
++              buflen = (size_t)scbuflen;
++
+       if (domain == NULL)
+               domain = get_default_domain();
+@@ -192,12 +200,13 @@ static struct passwd *nss_getpwnam(const
+ {
+       struct passwd *pw;
+       struct pwbuf *buf;
+-      size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++      long scbuflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++      size_t buflen = 1024;
+       char *localname;
+       int err = ENOMEM;
+-      if (buflen > UINT_MAX)
+-              goto err;
++      if (scbuflen > 0)
++              buflen = (size_t)scbuflen;
+       buf = malloc(sizeof(*buf) + buflen);
+       if (buf == NULL)
+@@ -301,7 +310,8 @@ static int _nss_name_to_gid(char *name,
+       struct group *gr = NULL;
+       struct group grbuf;
+       char *buf, *domain;
+-      size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++      long scbuflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++      size_t buflen = 1024;
+       int err = -EINVAL;
+       char *localname = NULL;
+       char *ref_name = NULL;
+@@ -327,8 +337,8 @@ static int _nss_name_to_gid(char *name,
+       }
+       err = -ENOMEM;
+-      if (buflen > UINT_MAX)
+-              goto out_name;
++      if (scbuflen > 0)
++              buflen = (size_t)scbuflen;
+       do {
+               buf = malloc(buflen);
index 42ef78351d29b6f806b5e5684079e13dc278c649..0509e51289985c28457db538b006025d94674bb3 100644 (file)
@@ -2,9 +2,9 @@ fix stat64 issue for modern macos versions (including macos arm64)
 
 --- a/tools/rpcgen/rpc_main.c
 +++ b/tools/rpcgen/rpc_main.c
-@@ -62,6 +62,12 @@
- #define EXTEND        1               /* alias for TRUE */
- #define DONT_EXTEND   0       /* alias for FALSE */
+@@ -68,6 +68,12 @@
+ # endif
+ #endif
  
 +#ifdef __APPLE__
 +# if __DARWIN_ONLY_64_BIT_INO_T