2012-11-16 23:12:11

by Jim Rees

[permalink] [raw]
Subject: [PATCH v2] NFS: Reduce stack use in encode_exchange_id()

encode_exchange_id() uses more stack space than necessary, giving a compile
time warning. Reduce the size of the static buffer for implementation name.

Signed-off-by: Jim Rees <[email protected]>
Reviewed-by: "Adamson, Dros" <[email protected]>
---
fs/nfs/nfs4xdr.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index 672d9b0..cc2f8a9 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -270,6 +270,8 @@ static int nfs4_stat_to_errno(int);

#if defined(CONFIG_NFS_V4_1)
#define NFS4_MAX_MACHINE_NAME_LEN (64)
+#define IMPL_NAME_LIMIT (sizeof(utsname()->sysname) + sizeof(utsname()->release) + \
+ sizeof(utsname()->version) + sizeof(utsname()->machine) + 8)

#define encode_exchange_id_maxsz (op_encode_hdr_maxsz + \
encode_verifier_maxsz + \
@@ -282,7 +284,7 @@ static int nfs4_stat_to_errno(int);
1 /* nii_domain */ + \
XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
1 /* nii_name */ + \
- XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
+ XDR_QUADLEN(IMPL_NAME_LIMIT) + \
3 /* nii_date */)
#define decode_exchange_id_maxsz (op_decode_hdr_maxsz + \
2 /* eir_clientid */ + \
@@ -1711,7 +1713,7 @@ static void encode_exchange_id(struct xdr_stream *xdr,
struct compound_hdr *hdr)
{
__be32 *p;
- char impl_name[NFS4_OPAQUE_LIMIT];
+ char impl_name[IMPL_NAME_LIMIT];
int len = 0;

encode_op_hdr(xdr, OP_EXCHANGE_ID, decode_exchange_id_maxsz, hdr);
@@ -1726,7 +1728,7 @@ static void encode_exchange_id(struct xdr_stream *xdr,
if (send_implementation_id &&
sizeof(CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN) > 1 &&
sizeof(CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN)
- <= NFS4_OPAQUE_LIMIT + 1)
+ <= sizeof(impl_name) + 1)
len = snprintf(impl_name, sizeof(impl_name), "%s %s %s %s",
utsname()->sysname, utsname()->release,
utsname()->version, utsname()->machine);
--
1.7.9.5



2012-11-17 00:53:09

by Myklebust, Trond

[permalink] [raw]
Subject: Re: [PATCH v2] NFS: Reduce stack use in encode_exchange_id()

T24gRnJpLCAyMDEyLTExLTE2IGF0IDE4OjEyIC0wNTAwLCBKaW0gUmVlcyB3cm90ZToNCj4gZW5j
b2RlX2V4Y2hhbmdlX2lkKCkgdXNlcyBtb3JlIHN0YWNrIHNwYWNlIHRoYW4gbmVjZXNzYXJ5LCBn
aXZpbmcgYSBjb21waWxlDQo+IHRpbWUgd2FybmluZy4gUmVkdWNlIHRoZSBzaXplIG9mIHRoZSBz
dGF0aWMgYnVmZmVyIGZvciBpbXBsZW1lbnRhdGlvbiBuYW1lLg0KPiANCj4gU2lnbmVkLW9mZi1i
eTogSmltIFJlZXMgPHJlZXNAdW1pY2guZWR1Pg0KPiBSZXZpZXdlZC1ieTogIkFkYW1zb24sIERy
b3MiIDxXZXN0b24uQWRhbXNvbkBuZXRhcHAuY29tPg0KPiAtLS0NCj4gIGZzL25mcy9uZnM0eGRy
LmMgfCAgICA4ICsrKysrLS0tDQo+ICAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAz
IGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9u
ZnMvbmZzNHhkci5jDQo+IGluZGV4IDY3MmQ5YjAuLmNjMmY4YTkgMTAwNjQ0DQo+IC0tLSBhL2Zz
L25mcy9uZnM0eGRyLmMNCj4gKysrIGIvZnMvbmZzL25mczR4ZHIuYw0KPiBAQCAtMjcwLDYgKzI3
MCw4IEBAIHN0YXRpYyBpbnQgbmZzNF9zdGF0X3RvX2Vycm5vKGludCk7DQo+ICANCj4gICNpZiBk
ZWZpbmVkKENPTkZJR19ORlNfVjRfMSkNCj4gICNkZWZpbmUgTkZTNF9NQVhfTUFDSElORV9OQU1F
X0xFTiAoNjQpDQo+ICsjZGVmaW5lIElNUExfTkFNRV9MSU1JVCAoc2l6ZW9mKHV0c25hbWUoKS0+
c3lzbmFtZSkgKyBzaXplb2YodXRzbmFtZSgpLT5yZWxlYXNlKSArIFwNCj4gKwkJCSBzaXplb2Yo
dXRzbmFtZSgpLT52ZXJzaW9uKSArIHNpemVvZih1dHNuYW1lKCktPm1hY2hpbmUpICsgOCkNCj4g
IA0KPiAgI2RlZmluZSBlbmNvZGVfZXhjaGFuZ2VfaWRfbWF4c3ogKG9wX2VuY29kZV9oZHJfbWF4
c3ogKyBcDQo+ICAJCQkJZW5jb2RlX3ZlcmlmaWVyX21heHN6ICsgXA0KPiBAQCAtMjgyLDcgKzI4
NCw3IEBAIHN0YXRpYyBpbnQgbmZzNF9zdGF0X3RvX2Vycm5vKGludCk7DQo+ICAJCQkJMSAvKiBu
aWlfZG9tYWluICovICsgXA0KPiAgCQkJCVhEUl9RVUFETEVOKE5GUzRfT1BBUVVFX0xJTUlUKSAr
IFwNCj4gIAkJCQkxIC8qIG5paV9uYW1lICovICsgXA0KPiAtCQkJCVhEUl9RVUFETEVOKE5GUzRf
T1BBUVVFX0xJTUlUKSArIFwNCj4gKwkJCQlYRFJfUVVBRExFTihJTVBMX05BTUVfTElNSVQpICsg
XA0KPiAgCQkJCTMgLyogbmlpX2RhdGUgKi8pDQo+ICAjZGVmaW5lIGRlY29kZV9leGNoYW5nZV9p
ZF9tYXhzeiAob3BfZGVjb2RlX2hkcl9tYXhzeiArIFwNCj4gIAkJCQkyIC8qIGVpcl9jbGllbnRp
ZCAqLyArIFwNCj4gQEAgLTE3MTEsNyArMTcxMyw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZV9leGNo
YW5nZV9pZChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLA0KPiAgCQkJICAgICAgIHN0cnVjdCBjb21w
b3VuZF9oZHIgKmhkcikNCj4gIHsNCj4gIAlfX2JlMzIgKnA7DQo+IC0JY2hhciBpbXBsX25hbWVb
TkZTNF9PUEFRVUVfTElNSVRdOw0KPiArCWNoYXIgaW1wbF9uYW1lW0lNUExfTkFNRV9MSU1JVF07
DQo+ICAJaW50IGxlbiA9IDA7DQo+ICANCj4gIAllbmNvZGVfb3BfaGRyKHhkciwgT1BfRVhDSEFO
R0VfSUQsIGRlY29kZV9leGNoYW5nZV9pZF9tYXhzeiwgaGRyKTsNCj4gQEAgLTE3MjYsNyArMTcy
OCw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZV9leGNoYW5nZV9pZChzdHJ1Y3QgeGRyX3N0cmVhbSAq
eGRyLA0KPiAgCWlmIChzZW5kX2ltcGxlbWVudGF0aW9uX2lkICYmDQo+ICAJICAgIHNpemVvZihD
T05GSUdfTkZTX1Y0XzFfSU1QTEVNRU5UQVRJT05fSURfRE9NQUlOKSA+IDEgJiYNCj4gIAkgICAg
c2l6ZW9mKENPTkZJR19ORlNfVjRfMV9JTVBMRU1FTlRBVElPTl9JRF9ET01BSU4pDQo+IC0JCTw9
IE5GUzRfT1BBUVVFX0xJTUlUICsgMSkNCj4gKwkJPD0gc2l6ZW9mKGltcGxfbmFtZSkgKyAxKQ0K
PiAgCQlsZW4gPSBzbnByaW50ZihpbXBsX25hbWUsIHNpemVvZihpbXBsX25hbWUpLCAiJXMgJXMg
JXMgJXMiLA0KPiAgCQkJICAgICAgIHV0c25hbWUoKS0+c3lzbmFtZSwgdXRzbmFtZSgpLT5yZWxl
YXNlLA0KPiAgCQkJICAgICAgIHV0c25hbWUoKS0+dmVyc2lvbiwgdXRzbmFtZSgpLT5tYWNoaW5l
KTsNCg0KVGhhbmtzIEppbSEgSSB3aWxsIGFwcGx5Li4uDQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0
DQpMaW51eCBORlMgY2xpZW50IG1haW50YWluZXINCg0KTmV0QXBwDQpUcm9uZC5NeWtsZWJ1c3RA
bmV0YXBwLmNvbQ0Kd3d3Lm5ldGFwcC5jb20NCg==