[PATCH] A few small ones

Jeremy Allison jra at samba.org
Tue Sep 27 02:26:40 UTC 2016


On Mon, Sep 26, 2016 at 05:54:33PM -0700, Volker Lendecke wrote:
> Hi!
> 
> Review appreciated!

LGTM. Pushed !

> From b9bb484dc20bfac46c47412a73f0c9c0ab877f4f Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Mon, 26 Sep 2016 08:16:15 -0700
> Subject: [PATCH 1/4] lib: Only return "rec" on demand in
>  messaging_filtered_read_recv
> 
> The message could be just a trigger without contents.
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/lib/messages.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/source3/lib/messages.c b/source3/lib/messages.c
> index 3ed6dfe..ef5d679 100644
> --- a/source3/lib/messages.c
> +++ b/source3/lib/messages.c
> @@ -650,7 +650,9 @@ int messaging_filtered_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
>  		tevent_req_received(req);
>  		return err;
>  	}
> -	*presult = talloc_move(mem_ctx, &state->rec);
> +	if (presult != NULL) {
> +		*presult = talloc_move(mem_ctx, &state->rec);
> +	}
>  	return 0;
>  }
>  
> -- 
> 2.7.4
> 
> 
> From 314f9555097d9620666ca6f8a13fe30cc6c05d12 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Sun, 18 Sep 2016 14:03:33 +0200
> Subject: [PATCH 2/4] wbclient: "ev" is no longer used in wbc_sids_to_xids
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source4/auth/unix_token.c                     | 2 +-
>  source4/libcli/wbclient/wbclient.c            | 3 +--
>  source4/libcli/wbclient/wbclient.h            | 3 +--
>  source4/ntvfs/posix/pvfs_acl.c                | 6 ++----
>  source4/ntvfs/posix/pvfs_acl_nfs4.c           | 3 +--
>  source4/rpc_server/unixinfo/dcesrv_unixinfo.c | 4 ++--
>  6 files changed, 8 insertions(+), 13 deletions(-)
> 
> diff --git a/source4/auth/unix_token.c b/source4/auth/unix_token.c
> index efc9a9d..385109b 100644
> --- a/source4/auth/unix_token.c
> +++ b/source4/auth/unix_token.c
> @@ -55,7 +55,7 @@ NTSTATUS security_token_to_unix_token(TALLOC_CTX *mem_ctx,
>  		ids[s].status = ID_UNKNOWN;
>  	}
>  
> -	status = wbc_sids_to_xids(ev, ids, token->num_sids);
> +	status = wbc_sids_to_xids(ids, token->num_sids);
>  	NT_STATUS_NOT_OK_RETURN(status);
>  
>  	g = token->num_sids;
> diff --git a/source4/libcli/wbclient/wbclient.c b/source4/libcli/wbclient/wbclient.c
> index f306556..1ff35c8 100644
> --- a/source4/libcli/wbclient/wbclient.c
> +++ b/source4/libcli/wbclient/wbclient.c
> @@ -26,8 +26,7 @@
>  #include "libcli/security/dom_sid.h"
>  #include "nsswitch/libwbclient/wbclient.h"
>  
> -NTSTATUS wbc_sids_to_xids(struct tevent_context *ev, struct id_map *ids,
> -			  uint32_t count)
> +NTSTATUS wbc_sids_to_xids(struct id_map *ids, uint32_t count)
>  {
>  	TALLOC_CTX *mem_ctx;
>  	uint32_t i;
> diff --git a/source4/libcli/wbclient/wbclient.h b/source4/libcli/wbclient/wbclient.h
> index fc096cc..1300c73 100644
> --- a/source4/libcli/wbclient/wbclient.h
> +++ b/source4/libcli/wbclient/wbclient.h
> @@ -20,8 +20,7 @@
>  */
>  #include "librpc/gen_ndr/idmap.h"
>  
> -NTSTATUS wbc_sids_to_xids(struct tevent_context *ev, struct id_map *ids,
> -			  uint32_t count);
> +NTSTATUS wbc_sids_to_xids(struct id_map *ids, uint32_t count);
>  
>  NTSTATUS wbc_xids_to_sids(struct tevent_context *ev, struct id_map *ids,
>  			  uint32_t count);
> diff --git a/source4/ntvfs/posix/pvfs_acl.c b/source4/ntvfs/posix/pvfs_acl.c
> index 269b5ec..be12ef2 100644
> --- a/source4/ntvfs/posix/pvfs_acl.c
> +++ b/source4/ntvfs/posix/pvfs_acl.c
> @@ -330,8 +330,7 @@ NTSTATUS pvfs_acl_set(struct pvfs_state *pvfs,
>  		}
>  		if (!dom_sid_equal(sd->owner_sid, new_sd->owner_sid)) {
>  			ids->sid = new_sd->owner_sid;
> -			status = wbc_sids_to_xids(pvfs->ntvfs->ctx->event_ctx,
> -						  ids, 1);
> +			status = wbc_sids_to_xids(ids, 1);
>  			NT_STATUS_NOT_OK_RETURN(status);
>  
>  			if (ids->xid.type == ID_TYPE_BOTH ||
> @@ -348,8 +347,7 @@ NTSTATUS pvfs_acl_set(struct pvfs_state *pvfs,
>  		}
>  		if (!dom_sid_equal(sd->group_sid, new_sd->group_sid)) {
>  			ids->sid = new_sd->group_sid;
> -			status = wbc_sids_to_xids(pvfs->ntvfs->ctx->event_ctx,
> -						  ids, 1);
> +			status = wbc_sids_to_xids(ids, 1);
>  			NT_STATUS_NOT_OK_RETURN(status);
>  
>  			if (ids->xid.type == ID_TYPE_BOTH ||
> diff --git a/source4/ntvfs/posix/pvfs_acl_nfs4.c b/source4/ntvfs/posix/pvfs_acl_nfs4.c
> index dbb43e2..948ddb2 100644
> --- a/source4/ntvfs/posix/pvfs_acl_nfs4.c
> +++ b/source4/ntvfs/posix/pvfs_acl_nfs4.c
> @@ -155,8 +155,7 @@ static NTSTATUS pvfs_acl_save_nfs4(struct pvfs_state *pvfs, struct pvfs_filename
>  		ids[i].status = ID_UNKNOWN;
>  	}
>  
> -	status = wbc_sids_to_xids(pvfs->ntvfs->ctx->event_ctx, ids,
> -				  acl.a_count);
> +	status = wbc_sids_to_xids(ids, acl.a_count);
>  	if (!NT_STATUS_IS_OK(status)) {
>  		talloc_free(tmp_ctx);
>  		return status;
> diff --git a/source4/rpc_server/unixinfo/dcesrv_unixinfo.c b/source4/rpc_server/unixinfo/dcesrv_unixinfo.c
> index 10eda45..771e4fd 100644
> --- a/source4/rpc_server/unixinfo/dcesrv_unixinfo.c
> +++ b/source4/rpc_server/unixinfo/dcesrv_unixinfo.c
> @@ -40,7 +40,7 @@ static NTSTATUS dcesrv_unixinfo_SidToUid(struct dcesrv_call_state *dce_call,
>  	ids->sid = &r->in.sid;
>  	ids->status = ID_UNKNOWN;
>  	ZERO_STRUCT(ids->xid);
> -	status = wbc_sids_to_xids(dce_call->event_ctx, ids, 1);
> +	status = wbc_sids_to_xids(ids, 1);
>  	NT_STATUS_NOT_OK_RETURN(status);
>  
>  	if (ids->xid.type == ID_TYPE_BOTH ||
> @@ -99,7 +99,7 @@ static NTSTATUS dcesrv_unixinfo_SidToGid(struct dcesrv_call_state *dce_call,
>  	ids->sid = &r->in.sid;
>  	ids->status = ID_UNKNOWN;
>  	ZERO_STRUCT(ids->xid);
> -	status = wbc_sids_to_xids(dce_call->event_ctx, ids, 1);
> +	status = wbc_sids_to_xids(ids, 1);
>  	NT_STATUS_NOT_OK_RETURN(status);
>  
>  	if (ids->xid.type == ID_TYPE_BOTH ||
> -- 
> 2.7.4
> 
> 
> From 6825b234d80a21911e480e58d3e6e973d4a96228 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Sun, 18 Sep 2016 14:06:24 +0200
> Subject: [PATCH 3/4] wbclient: "ev" is no longer used in wbc_xids_to_sids
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source4/libcli/wbclient/wbclient.c            | 3 +--
>  source4/libcli/wbclient/wbclient.h            | 3 +--
>  source4/ntvfs/posix/pvfs_acl.c                | 4 ++--
>  source4/ntvfs/posix/pvfs_acl_nfs4.c           | 2 +-
>  source4/rpc_server/unixinfo/dcesrv_unixinfo.c | 4 ++--
>  5 files changed, 7 insertions(+), 9 deletions(-)
> 
> diff --git a/source4/libcli/wbclient/wbclient.c b/source4/libcli/wbclient/wbclient.c
> index 1ff35c8..69d8b43 100644
> --- a/source4/libcli/wbclient/wbclient.c
> +++ b/source4/libcli/wbclient/wbclient.c
> @@ -102,8 +102,7 @@ NTSTATUS wbc_sids_to_xids(struct id_map *ids, uint32_t count)
>  	return NT_STATUS_OK;
>  }
>  
> -NTSTATUS wbc_xids_to_sids(struct tevent_context *ev, struct id_map *ids,
> -			  uint32_t count)
> +NTSTATUS wbc_xids_to_sids(struct id_map *ids, uint32_t count)
>  {
>  	TALLOC_CTX *mem_ctx;
>  	uint32_t i;
> diff --git a/source4/libcli/wbclient/wbclient.h b/source4/libcli/wbclient/wbclient.h
> index 1300c73..6334428 100644
> --- a/source4/libcli/wbclient/wbclient.h
> +++ b/source4/libcli/wbclient/wbclient.h
> @@ -22,5 +22,4 @@
>  
>  NTSTATUS wbc_sids_to_xids(struct id_map *ids, uint32_t count);
>  
> -NTSTATUS wbc_xids_to_sids(struct tevent_context *ev, struct id_map *ids,
> -			  uint32_t count);
> +NTSTATUS wbc_xids_to_sids(struct id_map *ids, uint32_t count);
> diff --git a/source4/ntvfs/posix/pvfs_acl.c b/source4/ntvfs/posix/pvfs_acl.c
> index be12ef2..b298764 100644
> --- a/source4/ntvfs/posix/pvfs_acl.c
> +++ b/source4/ntvfs/posix/pvfs_acl.c
> @@ -169,7 +169,7 @@ static NTSTATUS pvfs_default_acl(struct pvfs_state *pvfs,
>  	ids[1].xid.type = ID_TYPE_GID;
>  	ids[1].sid = NULL;
>  
> -	status = wbc_xids_to_sids(pvfs->ntvfs->ctx->event_ctx, ids, 2);
> +	status = wbc_xids_to_sids(ids, 2);
>  	NT_STATUS_NOT_OK_RETURN(status);
>  
>  	sd->owner_sid = talloc_steal(sd, ids[0].sid);
> @@ -995,7 +995,7 @@ NTSTATUS pvfs_acl_inherited_sd(struct pvfs_state *pvfs,
>  	ids[1].sid = NULL;
>  	ids[1].status = ID_UNKNOWN;
>  
> -	status = wbc_xids_to_sids(pvfs->ntvfs->ctx->event_ctx, ids, 2);
> +	status = wbc_xids_to_sids(ids, 2);
>  	if (!NT_STATUS_IS_OK(status)) {
>  		TALLOC_FREE(tmp_ctx);
>  		return status;
> diff --git a/source4/ntvfs/posix/pvfs_acl_nfs4.c b/source4/ntvfs/posix/pvfs_acl_nfs4.c
> index 948ddb2..bd00794 100644
> --- a/source4/ntvfs/posix/pvfs_acl_nfs4.c
> +++ b/source4/ntvfs/posix/pvfs_acl_nfs4.c
> @@ -90,7 +90,7 @@ static NTSTATUS pvfs_acl_load_nfs4(struct pvfs_state *pvfs, struct pvfs_filename
>  
>  	/* Allocate memory for the sids from the security descriptor to be on
>  	 * the safe side. */
> -	status = wbc_xids_to_sids(pvfs->ntvfs->ctx->event_ctx, ids, num_ids);
> +	status = wbc_xids_to_sids(ids, num_ids);
>  	NT_STATUS_NOT_OK_RETURN(status);
>  
>  	sd->owner_sid = talloc_steal(sd, ids[0].sid);
> diff --git a/source4/rpc_server/unixinfo/dcesrv_unixinfo.c b/source4/rpc_server/unixinfo/dcesrv_unixinfo.c
> index 771e4fd..848c11f 100644
> --- a/source4/rpc_server/unixinfo/dcesrv_unixinfo.c
> +++ b/source4/rpc_server/unixinfo/dcesrv_unixinfo.c
> @@ -77,7 +77,7 @@ static NTSTATUS dcesrv_unixinfo_UidToSid(struct dcesrv_call_state *dce_call,
>  	ids->xid.id = uid;
>  	ids->xid.type = ID_TYPE_UID;
>  
> -	status = wbc_xids_to_sids(dce_call->event_ctx, ids, 1);
> +	status = wbc_xids_to_sids(ids, 1);
>  	NT_STATUS_NOT_OK_RETURN(status);
>  
>  	r->out.sid = ids->sid;
> @@ -136,7 +136,7 @@ static NTSTATUS dcesrv_unixinfo_GidToSid(struct dcesrv_call_state *dce_call,
>  	ids->xid.id = gid;
>  	ids->xid.type = ID_TYPE_GID;
>  
> -	status = wbc_xids_to_sids(dce_call->event_ctx, ids, 1);
> +	status = wbc_xids_to_sids(ids, 1);
>  	NT_STATUS_NOT_OK_RETURN(status);
>  
>  	r->out.sid = ids->sid;
> -- 
> 2.7.4
> 
> 
> From 4fd18e3ef93901b23877273d826dd9a9a85d0c24 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Fri, 22 Jul 2016 15:59:32 +0200
> Subject: [PATCH 4/4] messaging: Add wrap check to messaging_rec_dup
> 
> Just paranoia
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/lib/messages.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/source3/lib/messages.c b/source3/lib/messages.c
> index ef5d679..3e11cc5 100644
> --- a/source3/lib/messages.c
> +++ b/source3/lib/messages.c
> @@ -496,9 +496,16 @@ static struct messaging_rec *messaging_rec_dup(TALLOC_CTX *mem_ctx,
>  {
>  	struct messaging_rec *result;
>  	size_t fds_size = sizeof(int64_t) * rec->num_fds;
> +	size_t payload_len;
> +
> +	payload_len = rec->buf.length + fds_size;
> +	if (payload_len < rec->buf.length) {
> +		/* overflow */
> +		return NULL;
> +	}
>  
>  	result = talloc_pooled_object(mem_ctx, struct messaging_rec, 2,
> -				      rec->buf.length + fds_size);
> +				      payload_len);
>  	if (result == NULL) {
>  		return NULL;
>  	}
> -- 
> 2.7.4
> 




More information about the samba-technical mailing list