This still causes crashes in mountd on 32bit systems without
https://marc.info/?l=linux-nfs&m=157250894818731&w=2
mountd: Version 2.4.2 starting
mountd: auth_unix_ip: inbuf 'nfsd fde2:2b6c:2d24:0021:0000:0000:0000:0050'
mountd: auth_unix_ip: client 0x13cd900 '*'
mountd: nfsd_fh: inbuf '* 6 \xd1fb45ab77b345d99b09b3217dcdf2ec'
*** stack smashing detected ***: <unknown> terminated
Aborted
Call chain looks like:
get_rootfh utils/mountd/mountd.c
check_is_mountpoint support/misc/mountpoint.c
nfsd_path_lstat support/misc/nfsd_path.c *
xlstat support/misc/xstat.c *
where two struct stats are declared on the stack in mountpoint.c without
including config.h and getting the __USE_FILE_OFFSET64 define, however
the following two files in the call chain include config.h and get a
different size struct stat.
Also attached are a few printf formating fixes for 32 bit.
Doug
From c36ce1a2a5df0bb6a50139c1ae246c4bab6e9184 Mon Sep 17 00:00:00 2001
From: Doug Nazar <nazard@xxxxxxxx>
Date: Sun, 17 Nov 2019 12:42:21 -0500
Subject: [PATCH] nfsdcld: Fix printf format strings on 32bit
Signed-off-by: Doug Nazar <nazard@xxxxxxxx>
---
utils/nfsdcld/nfsdcld.c | 14 +++++++-------
utils/nfsdcld/sqlite.c | 6 +++---
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/utils/nfsdcld/nfsdcld.c b/utils/nfsdcld/nfsdcld.c
index b064336d..9297df51 100644
--- a/utils/nfsdcld/nfsdcld.c
+++ b/utils/nfsdcld/nfsdcld.c
@@ -378,7 +378,7 @@ cld_not_implemented(struct cld_client *clnt)
bsize = cld_message_size(cmsg);
wsize = atomicio((void *)write, clnt->cl_fd, cmsg, bsize);
if (wsize != bsize)
- xlog(L_ERROR, "%s: problem writing to cld pipe (%ld): %m",
+ xlog(L_ERROR, "%s: problem writing to cld pipe (%zd): %m",
__func__, wsize);
/* reopen pipe, just to be sure */
@@ -409,7 +409,7 @@ cld_get_version(struct cld_client *clnt)
xlog(D_GENERAL, "Doing downcall with status %d", cmsg->cm_status);
wsize = atomicio((void *)write, clnt->cl_fd, cmsg, bsize);
if (wsize != bsize) {
- xlog(L_ERROR, "%s: problem writing to cld pipe (%ld): %m",
+ xlog(L_ERROR, "%s: problem writing to cld pipe (%zd): %m",
__func__, wsize);
ret = cld_pipe_open(clnt);
if (ret) {
@@ -459,7 +459,7 @@ reply:
xlog(D_GENERAL, "Doing downcall with status %d", cmsg->cm_status);
wsize = atomicio((void *)write, clnt->cl_fd, cmsg, bsize);
if (wsize != bsize) {
- xlog(L_ERROR, "%s: problem writing to cld pipe (%ld): %m",
+ xlog(L_ERROR, "%s: problem writing to cld pipe (%zd): %m",
__func__, wsize);
ret = cld_pipe_open(clnt);
if (ret) {
@@ -498,7 +498,7 @@ reply:
cmsg->cm_status);
wsize = atomicio((void *)write, clnt->cl_fd, cmsg, bsize);
if (wsize != bsize) {
- xlog(L_ERROR, "%s: problem writing to cld pipe (%ld): %m",
+ xlog(L_ERROR, "%s: problem writing to cld pipe (%zd): %m",
__func__, wsize);
ret = cld_pipe_open(clnt);
if (ret) {
@@ -548,7 +548,7 @@ reply:
cmsg->cm_status);
wsize = atomicio((void *)write, clnt->cl_fd, cmsg, bsize);
if (wsize != bsize) {
- xlog(L_ERROR, "%s: problem writing to cld pipe (%ld): %m",
+ xlog(L_ERROR, "%s: problem writing to cld pipe (%zd): %m",
__func__, wsize);
ret = cld_pipe_open(clnt);
if (ret) {
@@ -607,7 +607,7 @@ reply:
xlog(D_GENERAL, "Doing downcall with status %d", cmsg->cm_status);
wsize = atomicio((void *)write, clnt->cl_fd, cmsg, bsize);
if (wsize != bsize) {
- xlog(L_ERROR, "%s: problem writing to cld pipe (%ld): %m",
+ xlog(L_ERROR, "%s: problem writing to cld pipe (%zd): %m",
__func__, wsize);
ret = cld_pipe_open(clnt);
if (ret) {
@@ -667,7 +667,7 @@ reply:
xlog(D_GENERAL, "Doing downcall with status %d", cmsg->cm_status);
wsize = atomicio((void *)write, clnt->cl_fd, cmsg, bsize);
if (wsize != bsize) {
- xlog(L_ERROR, "%s: problem writing to cld pipe (%ld): %m",
+ xlog(L_ERROR, "%s: problem writing to cld pipe (%zd): %m",
__func__, wsize);
ret = cld_pipe_open(clnt);
if (ret) {
diff --git a/utils/nfsdcld/sqlite.c b/utils/nfsdcld/sqlite.c
index 23be7971..09518e22 100644
--- a/utils/nfsdcld/sqlite.c
+++ b/utils/nfsdcld/sqlite.c
@@ -512,7 +512,7 @@ sqlite_startup_query_grace(void)
current_epoch = tcur;
recovery_epoch = trec;
ret = 0;
- xlog(D_GENERAL, "%s: current_epoch=%lu recovery_epoch=%lu",
+ xlog(D_GENERAL, "%s: current_epoch=%"PRIu64" recovery_epoch=%"PRIu64,
__func__, current_epoch, recovery_epoch);
out:
sqlite3_finalize(stmt);
@@ -1223,7 +1223,7 @@ sqlite_grace_start(void)
current_epoch = tcur;
recovery_epoch = trec;
- xlog(D_GENERAL, "%s: current_epoch=%lu recovery_epoch=%lu",
+ xlog(D_GENERAL, "%s: current_epoch=%"PRIu64" recovery_epoch=%"PRIu64,
__func__, current_epoch, recovery_epoch);
out:
@@ -1282,7 +1282,7 @@ sqlite_grace_done(void)
}
recovery_epoch = 0;
- xlog(D_GENERAL, "%s: current_epoch=%lu recovery_epoch=%lu",
+ xlog(D_GENERAL, "%s: current_epoch=%"PRIu64" recovery_epoch=%"PRIu64,
__func__, current_epoch, recovery_epoch);
out:
--
2.23.0