Print this page
3354 kernel crash in rpcsec_gss after using gsscred
Reviewed by: Toomas Soome <tsoome@me.com>
Reviewed by: Carlos Neira <cneirabustos@gmail.com>
Approved by: Robert Mustacchi <rm@joyent.com>
NEX-4123 xdrmblk_getpos() is unreliable
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
re #13613 rb4516 Tunables needs volatile keyword
closes #11843 rb3753 - NFSv3/UDP server sends packets with wrong Source IP in header (picked from ncp3-gate)
*** 21,30 ****
--- 21,32 ----
/*
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright 2012 Marcel Telka <marcel@telka.sk>
+ * Copyright 2018 OmniOS Community Edition (OmniOSce) Association.
*/
/* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
*** 99,118 ****
svc_clts_kgetres, /* Get pointer to response buffer */
svc_clts_kfreeres, /* Destroy pre-serialized response header */
svc_clts_kclone_destroy, /* Destroy a clone xprt */
svc_clts_kstart, /* Tell `ready-to-receive' to rpcmod */
svc_clts_kclone_xprt, /* transport specific clone xprt function */
! svc_clts_ktattrs /* Transport specific attributes. */
};
/*
* Transport private data.
* Kept in xprt->xp_p2buf.
*/
struct udp_data {
mblk_t *ud_resp; /* buffer for response */
mblk_t *ud_inmp; /* mblk chain of request */
};
#define UD_MAXSIZE 8800
#define UD_INITSIZE 2048
--- 101,123 ----
svc_clts_kgetres, /* Get pointer to response buffer */
svc_clts_kfreeres, /* Destroy pre-serialized response header */
svc_clts_kclone_destroy, /* Destroy a clone xprt */
svc_clts_kstart, /* Tell `ready-to-receive' to rpcmod */
svc_clts_kclone_xprt, /* transport specific clone xprt function */
! svc_clts_ktattrs, /* Transport specific attributes */
! rpcmod_hold, /* Increment transport reference count */
! rpcmod_release /* Decrement transport reference count */
};
/*
* Transport private data.
* Kept in xprt->xp_p2buf.
*/
struct udp_data {
mblk_t *ud_resp; /* buffer for response */
mblk_t *ud_inmp; /* mblk chain of request */
+ sin6_t ud_local; /* local address */
};
#define UD_MAXSIZE 8800
#define UD_INITSIZE 2048
*** 322,331 ****
--- 327,338 ----
*/
clone_xprt->xp_rtaddr.buf = (char *)mp->b_rptr +
pptr->unitdata_ind.SRC_offset;
clone_xprt->xp_rtaddr.len = pptr->unitdata_ind.SRC_length;
+ clone_xprt->xp_lcladdr.buf = (char *)&ud->ud_local;
+
/*
* Copy the local transport address in the service_transport
* handle at the address in the request. We will have only
* the local IP address in options.
*/
*** 759,769 ****
#define XIDHASH(xid) ((xid) % DRHASHSZ)
#define DRHASH(dr) XIDHASH((dr)->dr_xid)
#define REQTOXID(req) ((req)->rq_xprt->xp_xid)
static int ndupreqs = 0;
! int maxdupreqs = MAXDUPREQS;
static kmutex_t dupreq_lock;
static struct dupreq *drhashtbl[DRHASHSZ];
static int drhashstat[DRHASHSZ];
static void unhash(struct dupreq *);
--- 766,776 ----
#define XIDHASH(xid) ((xid) % DRHASHSZ)
#define DRHASH(dr) XIDHASH((dr)->dr_xid)
#define REQTOXID(req) ((req)->rq_xprt->xp_xid)
static int ndupreqs = 0;
! volatile int maxdupreqs = MAXDUPREQS;
static kmutex_t dupreq_lock;
static struct dupreq *drhashtbl[DRHASHSZ];
static int drhashstat[DRHASHSZ];
static void unhash(struct dupreq *);