public inbox for linux-arch@vger.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20180104114732.utkixumxt7rfuf3g@salmiak>

diff --git a/a/1.txt b/N1/1.txt
index 3cb696f..ffb989e 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -48,244 +48,3 @@ Then, rather than sequences like:
 if the element is a structure with multiple fields.
 
 Does that sound workable to you?
-
-From a quick scan, it looks like it would fit all of the example cases below.
-
-Thanks,
-Mark.
-
-> Note that these are "a human looked at static analysis reports and
-> could not rationalize that these are false positives". Specific domain
-> knowledge about these paths may find that some of them are indeed false
-> positives.
-> 
-> The change to m_start in kernel/user_namespace.c is interesting because
-> that's an example where the nospec_load() approach by itself would need
-> to barrier speculation twice whereas if_nospec can do it once for the
-> whole block.
-> 
-> [ forgive any whitespace damage ]
-> 
-> 8<---
-> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
-> index 3e7e283a44a8..65175bbe805f 100644
-> --- a/drivers/media/usb/uvc/uvc_v4l2.c
-> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
-> @@ -821,6 +821,7 @@ static int uvc_ioctl_enum_input(struct file *file, void *fh,
->  		}
->  		pin = iterm->id;
->  	} else if (index < selector->bNrInPins) {
-> +		osb();
->  		pin = selector->baSourceID[index];
->  		list_for_each_entry(iterm, &chain->entities, chain) {
->  			if (!UVC_ENTITY_IS_ITERM(iterm))
-> diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c
-> index 988c8857d78c..cf267b709af6 100644
-> --- a/drivers/net/wireless/ath/carl9170/main.c
-> +++ b/drivers/net/wireless/ath/carl9170/main.c
-> @@ -1388,6 +1388,7 @@ static int carl9170_op_conf_tx(struct ieee80211_hw *hw,
->  
->  	mutex_lock(&ar->mutex);
->  	if (queue < ar->hw->queues) {
-> +		osb();
->  		memcpy(&ar->edcf[ar9170_qmap[queue]], param, sizeof(*param));
-
->  		ret = carl9170_set_qos(ar);
->  	} else {
-> diff --git a/drivers/net/wireless/intersil/p54/main.c b/drivers/net/wireless/intersil/p54/main.c
-> index ab6d39e12069..f024f1ad81ff 100644
-> --- a/drivers/net/wireless/intersil/p54/main.c
-> +++ b/drivers/net/wireless/intersil/p54/main.c
-> @@ -415,6 +415,7 @@ static int p54_conf_tx(struct ieee80211_hw *dev,
->  
->  	mutex_lock(&priv->conf_mutex);
->  	if (queue < dev->queues) {
-> +		osb();
->  		P54_SET_QUEUE(priv->qos_params[queue], params->aifs,
->  			params->cw_min, params->cw_max, params->txop);
->  		ret = p54_set_edcf(priv);
-> diff --git a/drivers/net/wireless/st/cw1200/sta.c b/drivers/net/wireless/st/cw1200/sta.c
-> index 38678e9a0562..b4a2a7ba04e8 100644
-> --- a/drivers/net/wireless/st/cw1200/sta.c
-> +++ b/drivers/net/wireless/st/cw1200/sta.c
-> @@ -619,6 +619,7 @@ int cw1200_conf_tx(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
->  	mutex_lock(&priv->conf_mutex);
->  
->  	if (queue < dev->queues) {
-> +		osb();
->  		old_uapsd_flags = le16_to_cpu(priv->uapsd_info.uapsd_flags);
->  
->  		WSM_TX_QUEUE_SET(&priv->tx_queue_params, queue, 0, 0, 0);
-> diff --git a/drivers/scsi/qla2xxx/qla_mr.c b/drivers/scsi/qla2xxx/qla_mr.c
-> index d5da3981cefe..dec8b6e087e3 100644
-> --- a/drivers/scsi/qla2xxx/qla_mr.c
-> +++ b/drivers/scsi/qla2xxx/qla_mr.c
-> @@ -2304,10 +2304,12 @@ qlafx00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
->  	req = ha->req_q_map[que];
->  
->  	/* Validate handle. */
-> -	if (handle < req->num_outstanding_cmds)
-> +	if (handle < req->num_outstanding_cmds) {
-> +		osb();
->  		sp = req->outstanding_cmds[handle];
-> -	else
-> +	} else {
->  		sp = NULL;
-> +	}
->  
->  	if (sp == NULL) {
->  		ql_dbg(ql_dbg_io, vha, 0x3034,
-> @@ -2655,10 +2657,12 @@ qlafx00_multistatus_entry(struct scsi_qla_host *vha,
->  		req = ha->req_q_map[que];
->  
->  		/* Validate handle. */
-> -		if (handle < req->num_outstanding_cmds)
-> +		if (handle < req->num_outstanding_cmds) {
-> +			osb();
->  			sp = req->outstanding_cmds[handle];
-> -		else
-> +		} else {
->  			sp = NULL;
-> +		}
->  
->  		if (sp == NULL) {
->  			ql_dbg(ql_dbg_io, vha, 0x3044,
-> diff --git a/drivers/thermal/int340x_thermal/int340x_thermal_zone.c b/drivers/thermal/int340x_thermal/int340x_thermal_zone.c
-> index 145a5c53ff5c..d732b34e120d 100644
-> --- a/drivers/thermal/int340x_thermal/int340x_thermal_zone.c
-> +++ b/drivers/thermal/int340x_thermal/int340x_thermal_zone.c
-> @@ -57,15 +57,16 @@ static int int340x_thermal_get_trip_temp(struct thermal_zone_device *zone,
->  	if (d->override_ops && d->override_ops->get_trip_temp)
->  		return d->override_ops->get_trip_temp(zone, trip, temp);
->  
-> -	if (trip < d->aux_trip_nr)
-> +	if (trip < d->aux_trip_nr) {
-> +		osb();
->  		*temp = d->aux_trips[trip];
-> -	else if (trip == d->crt_trip_id)
-> +	} else if (trip == d->crt_trip_id) {
->  		*temp = d->crt_temp;
-> -	else if (trip == d->psv_trip_id)
-> +	} else if (trip == d->psv_trip_id) {
->  		*temp = d->psv_temp;
-> -	else if (trip == d->hot_trip_id)
-> +	} else if (trip == d->hot_trip_id) {
->  		*temp = d->hot_temp;
-> -	else {
-> +	} else {
->  		for (i = 0; i < INT340X_THERMAL_MAX_ACT_TRIP_COUNT; i++) {
->  			if (d->act_trips[i].valid &&
->  			    d->act_trips[i].id == trip) {
-> diff --git a/fs/udf/misc.c b/fs/udf/misc.c
-> index 401e64cde1be..c5394760d26b 100644
-> --- a/fs/udf/misc.c
-> +++ b/fs/udf/misc.c
-> @@ -104,6 +104,8 @@ struct genericFormat *udf_add_extendedattr(struct inode *inode, uint32_t size,
->  					iinfo->i_lenEAttr) {
->  				uint32_t aal =
->  					le32_to_cpu(eahd->appAttrLocation);
-> +
-> +				osb();
->  				memmove(&ea[offset - aal + size],
->  					&ea[aal], offset - aal);
->  				offset -= aal;
-> @@ -114,6 +116,8 @@ struct genericFormat *udf_add_extendedattr(struct inode *inode, uint32_t size,
->  					iinfo->i_lenEAttr) {
->  				uint32_t ial =
->  					le32_to_cpu(eahd->impAttrLocation);
-> +
-> +				osb();
->  				memmove(&ea[offset - ial + size],
->  					&ea[ial], offset - ial);
->  				offset -= ial;
-> @@ -125,6 +129,8 @@ struct genericFormat *udf_add_extendedattr(struct inode *inode, uint32_t size,
->  					iinfo->i_lenEAttr) {
->  				uint32_t aal =
->  					le32_to_cpu(eahd->appAttrLocation);
-> +
-> +				osb();
->  				memmove(&ea[offset - aal + size],
->  					&ea[aal], offset - aal);
->  				offset -= aal;
-> diff --git a/include/linux/fdtable.h b/include/linux/fdtable.h
-> index 1c65817673db..dbc12007da51 100644
-> --- a/include/linux/fdtable.h
-> +++ b/include/linux/fdtable.h
-> @@ -82,8 +82,10 @@ static inline struct file *__fcheck_files(struct files_struct *files, unsigned i
->  {
->  	struct fdtable *fdt = rcu_dereference_raw(files->fdt);
->  
-> -	if (fd < fdt->max_fds)
-> +	if (fd < fdt->max_fds) {
-> +		osb();
->  		return rcu_dereference_raw(fdt->fd[fd]);
-> +	}
->  	return NULL;
->  }
->  
-> diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-> index 246d4d4ce5c7..aa0be8cef2d4 100644
-> --- a/kernel/user_namespace.c
-> +++ b/kernel/user_namespace.c
-> @@ -648,15 +648,18 @@ static void *m_start(struct seq_file *seq, loff_t *ppos,
->  {
->  	loff_t pos = *ppos;
->  	unsigned extents = map->nr_extents;
-> -	smp_rmb();
->  
-> -	if (pos >= extents)
-> -		return NULL;
-> +	/* paired with smp_wmb in map_write */
-> +	smp_rmb();
->  
-> -	if (extents <= UID_GID_MAP_MAX_BASE_EXTENTS)
-> -		return &map->extent[pos];
-> +	if (pos < extents) {
-> +		osb();
-> +		if (extents <= UID_GID_MAP_MAX_BASE_EXTENTS)
-> +			return &map->extent[pos];
-> +		return &map->forward[pos];
-> +	}
->  
-> -	return &map->forward[pos];
-> +	return NULL;
->  }
->  
->  static void *uid_m_start(struct seq_file *seq, loff_t *ppos)
-> diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
-> index 125c1eab3eaa..56909c8fa025 100644
-> --- a/net/ipv4/raw.c
-> +++ b/net/ipv4/raw.c
-> @@ -476,6 +476,7 @@ static int raw_getfrag(void *from, char *to, int offset, int len, int odd,
->  	if (offset < rfv->hlen) {
->  		int copy = min(rfv->hlen - offset, len);
->  
-> +		osb();
->  		if (skb->ip_summed == CHECKSUM_PARTIAL)
->  			memcpy(to, rfv->hdr.c + offset, copy);
->  		else
-> diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
-> index 761a473a07c5..0942784f3f8d 100644
-> --- a/net/ipv6/raw.c
-> +++ b/net/ipv6/raw.c
-> @@ -729,6 +729,7 @@ static int raw6_getfrag(void *from, char *to, int offset, int len, int odd,
->  	if (offset < rfv->hlen) {
->  		int copy = min(rfv->hlen - offset, len);
->  
-> +		osb();
->  		if (skb->ip_summed == CHECKSUM_PARTIAL)
->  			memcpy(to, rfv->c + offset, copy);
->  		else
-> diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
-> index 8ca9915befc8..7f83abdea255 100644
-> --- a/net/mpls/af_mpls.c
-> +++ b/net/mpls/af_mpls.c
-> @@ -81,6 +81,8 @@ static struct mpls_route *mpls_route_input_rcu(struct net *net, unsigned index)
->  	if (index < net->mpls.platform_labels) {
->  		struct mpls_route __rcu **platform_label =
->  			rcu_dereference(net->mpls.platform_label);
-> +
-> +		osb();
->  		rt = rcu_dereference(platform_label[index]);
->  	}
->  	return rt;
diff --git a/a/content_digest b/N1/content_digest
index 747c706..b427db7 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -73,247 +73,6 @@
  "... which also means we don't have to annotate every single load in the branch\n"
  "if the element is a structure with multiple fields.\n"
  "\n"
- "Does that sound workable to you?\n"
- "\n"
- "From a quick scan, it looks like it would fit all of the example cases below.\n"
- "\n"
- "Thanks,\n"
- "Mark.\n"
- "\n"
- "> Note that these are \"a human looked at static analysis reports and\n"
- "> could not rationalize that these are false positives\". Specific domain\n"
- "> knowledge about these paths may find that some of them are indeed false\n"
- "> positives.\n"
- "> \n"
- "> The change to m_start in kernel/user_namespace.c is interesting because\n"
- "> that's an example where the nospec_load() approach by itself would need\n"
- "> to barrier speculation twice whereas if_nospec can do it once for the\n"
- "> whole block.\n"
- "> \n"
- "> [ forgive any whitespace damage ]\n"
- "> \n"
- "> 8<---\n"
- "> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c\n"
- "> index 3e7e283a44a8..65175bbe805f 100644\n"
- "> --- a/drivers/media/usb/uvc/uvc_v4l2.c\n"
- "> +++ b/drivers/media/usb/uvc/uvc_v4l2.c\n"
- "> @@ -821,6 +821,7 @@ static int uvc_ioctl_enum_input(struct file *file, void *fh,\n"
- ">  \t\t}\n"
- ">  \t\tpin = iterm->id;\n"
- ">  \t} else if (index < selector->bNrInPins) {\n"
- "> +\t\tosb();\n"
- ">  \t\tpin = selector->baSourceID[index];\n"
- ">  \t\tlist_for_each_entry(iterm, &chain->entities, chain) {\n"
- ">  \t\t\tif (!UVC_ENTITY_IS_ITERM(iterm))\n"
- "> diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c\n"
- "> index 988c8857d78c..cf267b709af6 100644\n"
- "> --- a/drivers/net/wireless/ath/carl9170/main.c\n"
- "> +++ b/drivers/net/wireless/ath/carl9170/main.c\n"
- "> @@ -1388,6 +1388,7 @@ static int carl9170_op_conf_tx(struct ieee80211_hw *hw,\n"
- ">  \n"
- ">  \tmutex_lock(&ar->mutex);\n"
- ">  \tif (queue < ar->hw->queues) {\n"
- "> +\t\tosb();\n"
- ">  \t\tmemcpy(&ar->edcf[ar9170_qmap[queue]], param, sizeof(*param));\n"
- "\n"
- ">  \t\tret = carl9170_set_qos(ar);\n"
- ">  \t} else {\n"
- "> diff --git a/drivers/net/wireless/intersil/p54/main.c b/drivers/net/wireless/intersil/p54/main.c\n"
- "> index ab6d39e12069..f024f1ad81ff 100644\n"
- "> --- a/drivers/net/wireless/intersil/p54/main.c\n"
- "> +++ b/drivers/net/wireless/intersil/p54/main.c\n"
- "> @@ -415,6 +415,7 @@ static int p54_conf_tx(struct ieee80211_hw *dev,\n"
- ">  \n"
- ">  \tmutex_lock(&priv->conf_mutex);\n"
- ">  \tif (queue < dev->queues) {\n"
- "> +\t\tosb();\n"
- ">  \t\tP54_SET_QUEUE(priv->qos_params[queue], params->aifs,\n"
- ">  \t\t\tparams->cw_min, params->cw_max, params->txop);\n"
- ">  \t\tret = p54_set_edcf(priv);\n"
- "> diff --git a/drivers/net/wireless/st/cw1200/sta.c b/drivers/net/wireless/st/cw1200/sta.c\n"
- "> index 38678e9a0562..b4a2a7ba04e8 100644\n"
- "> --- a/drivers/net/wireless/st/cw1200/sta.c\n"
- "> +++ b/drivers/net/wireless/st/cw1200/sta.c\n"
- "> @@ -619,6 +619,7 @@ int cw1200_conf_tx(struct ieee80211_hw *dev, struct ieee80211_vif *vif,\n"
- ">  \tmutex_lock(&priv->conf_mutex);\n"
- ">  \n"
- ">  \tif (queue < dev->queues) {\n"
- "> +\t\tosb();\n"
- ">  \t\told_uapsd_flags = le16_to_cpu(priv->uapsd_info.uapsd_flags);\n"
- ">  \n"
- ">  \t\tWSM_TX_QUEUE_SET(&priv->tx_queue_params, queue, 0, 0, 0);\n"
- "> diff --git a/drivers/scsi/qla2xxx/qla_mr.c b/drivers/scsi/qla2xxx/qla_mr.c\n"
- "> index d5da3981cefe..dec8b6e087e3 100644\n"
- "> --- a/drivers/scsi/qla2xxx/qla_mr.c\n"
- "> +++ b/drivers/scsi/qla2xxx/qla_mr.c\n"
- "> @@ -2304,10 +2304,12 @@ qlafx00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)\n"
- ">  \treq = ha->req_q_map[que];\n"
- ">  \n"
- ">  \t/* Validate handle. */\n"
- "> -\tif (handle < req->num_outstanding_cmds)\n"
- "> +\tif (handle < req->num_outstanding_cmds) {\n"
- "> +\t\tosb();\n"
- ">  \t\tsp = req->outstanding_cmds[handle];\n"
- "> -\telse\n"
- "> +\t} else {\n"
- ">  \t\tsp = NULL;\n"
- "> +\t}\n"
- ">  \n"
- ">  \tif (sp == NULL) {\n"
- ">  \t\tql_dbg(ql_dbg_io, vha, 0x3034,\n"
- "> @@ -2655,10 +2657,12 @@ qlafx00_multistatus_entry(struct scsi_qla_host *vha,\n"
- ">  \t\treq = ha->req_q_map[que];\n"
- ">  \n"
- ">  \t\t/* Validate handle. */\n"
- "> -\t\tif (handle < req->num_outstanding_cmds)\n"
- "> +\t\tif (handle < req->num_outstanding_cmds) {\n"
- "> +\t\t\tosb();\n"
- ">  \t\t\tsp = req->outstanding_cmds[handle];\n"
- "> -\t\telse\n"
- "> +\t\t} else {\n"
- ">  \t\t\tsp = NULL;\n"
- "> +\t\t}\n"
- ">  \n"
- ">  \t\tif (sp == NULL) {\n"
- ">  \t\t\tql_dbg(ql_dbg_io, vha, 0x3044,\n"
- "> diff --git a/drivers/thermal/int340x_thermal/int340x_thermal_zone.c b/drivers/thermal/int340x_thermal/int340x_thermal_zone.c\n"
- "> index 145a5c53ff5c..d732b34e120d 100644\n"
- "> --- a/drivers/thermal/int340x_thermal/int340x_thermal_zone.c\n"
- "> +++ b/drivers/thermal/int340x_thermal/int340x_thermal_zone.c\n"
- "> @@ -57,15 +57,16 @@ static int int340x_thermal_get_trip_temp(struct thermal_zone_device *zone,\n"
- ">  \tif (d->override_ops && d->override_ops->get_trip_temp)\n"
- ">  \t\treturn d->override_ops->get_trip_temp(zone, trip, temp);\n"
- ">  \n"
- "> -\tif (trip < d->aux_trip_nr)\n"
- "> +\tif (trip < d->aux_trip_nr) {\n"
- "> +\t\tosb();\n"
- ">  \t\t*temp = d->aux_trips[trip];\n"
- "> -\telse if (trip == d->crt_trip_id)\n"
- "> +\t} else if (trip == d->crt_trip_id) {\n"
- ">  \t\t*temp = d->crt_temp;\n"
- "> -\telse if (trip == d->psv_trip_id)\n"
- "> +\t} else if (trip == d->psv_trip_id) {\n"
- ">  \t\t*temp = d->psv_temp;\n"
- "> -\telse if (trip == d->hot_trip_id)\n"
- "> +\t} else if (trip == d->hot_trip_id) {\n"
- ">  \t\t*temp = d->hot_temp;\n"
- "> -\telse {\n"
- "> +\t} else {\n"
- ">  \t\tfor (i = 0; i < INT340X_THERMAL_MAX_ACT_TRIP_COUNT; i++) {\n"
- ">  \t\t\tif (d->act_trips[i].valid &&\n"
- ">  \t\t\t    d->act_trips[i].id == trip) {\n"
- "> diff --git a/fs/udf/misc.c b/fs/udf/misc.c\n"
- "> index 401e64cde1be..c5394760d26b 100644\n"
- "> --- a/fs/udf/misc.c\n"
- "> +++ b/fs/udf/misc.c\n"
- "> @@ -104,6 +104,8 @@ struct genericFormat *udf_add_extendedattr(struct inode *inode, uint32_t size,\n"
- ">  \t\t\t\t\tiinfo->i_lenEAttr) {\n"
- ">  \t\t\t\tuint32_t aal =\n"
- ">  \t\t\t\t\tle32_to_cpu(eahd->appAttrLocation);\n"
- "> +\n"
- "> +\t\t\t\tosb();\n"
- ">  \t\t\t\tmemmove(&ea[offset - aal + size],\n"
- ">  \t\t\t\t\t&ea[aal], offset - aal);\n"
- ">  \t\t\t\toffset -= aal;\n"
- "> @@ -114,6 +116,8 @@ struct genericFormat *udf_add_extendedattr(struct inode *inode, uint32_t size,\n"
- ">  \t\t\t\t\tiinfo->i_lenEAttr) {\n"
- ">  \t\t\t\tuint32_t ial =\n"
- ">  \t\t\t\t\tle32_to_cpu(eahd->impAttrLocation);\n"
- "> +\n"
- "> +\t\t\t\tosb();\n"
- ">  \t\t\t\tmemmove(&ea[offset - ial + size],\n"
- ">  \t\t\t\t\t&ea[ial], offset - ial);\n"
- ">  \t\t\t\toffset -= ial;\n"
- "> @@ -125,6 +129,8 @@ struct genericFormat *udf_add_extendedattr(struct inode *inode, uint32_t size,\n"
- ">  \t\t\t\t\tiinfo->i_lenEAttr) {\n"
- ">  \t\t\t\tuint32_t aal =\n"
- ">  \t\t\t\t\tle32_to_cpu(eahd->appAttrLocation);\n"
- "> +\n"
- "> +\t\t\t\tosb();\n"
- ">  \t\t\t\tmemmove(&ea[offset - aal + size],\n"
- ">  \t\t\t\t\t&ea[aal], offset - aal);\n"
- ">  \t\t\t\toffset -= aal;\n"
- "> diff --git a/include/linux/fdtable.h b/include/linux/fdtable.h\n"
- "> index 1c65817673db..dbc12007da51 100644\n"
- "> --- a/include/linux/fdtable.h\n"
- "> +++ b/include/linux/fdtable.h\n"
- "> @@ -82,8 +82,10 @@ static inline struct file *__fcheck_files(struct files_struct *files, unsigned i\n"
- ">  {\n"
- ">  \tstruct fdtable *fdt = rcu_dereference_raw(files->fdt);\n"
- ">  \n"
- "> -\tif (fd < fdt->max_fds)\n"
- "> +\tif (fd < fdt->max_fds) {\n"
- "> +\t\tosb();\n"
- ">  \t\treturn rcu_dereference_raw(fdt->fd[fd]);\n"
- "> +\t}\n"
- ">  \treturn NULL;\n"
- ">  }\n"
- ">  \n"
- "> diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c\n"
- "> index 246d4d4ce5c7..aa0be8cef2d4 100644\n"
- "> --- a/kernel/user_namespace.c\n"
- "> +++ b/kernel/user_namespace.c\n"
- "> @@ -648,15 +648,18 @@ static void *m_start(struct seq_file *seq, loff_t *ppos,\n"
- ">  {\n"
- ">  \tloff_t pos = *ppos;\n"
- ">  \tunsigned extents = map->nr_extents;\n"
- "> -\tsmp_rmb();\n"
- ">  \n"
- "> -\tif (pos >= extents)\n"
- "> -\t\treturn NULL;\n"
- "> +\t/* paired with smp_wmb in map_write */\n"
- "> +\tsmp_rmb();\n"
- ">  \n"
- "> -\tif (extents <= UID_GID_MAP_MAX_BASE_EXTENTS)\n"
- "> -\t\treturn &map->extent[pos];\n"
- "> +\tif (pos < extents) {\n"
- "> +\t\tosb();\n"
- "> +\t\tif (extents <= UID_GID_MAP_MAX_BASE_EXTENTS)\n"
- "> +\t\t\treturn &map->extent[pos];\n"
- "> +\t\treturn &map->forward[pos];\n"
- "> +\t}\n"
- ">  \n"
- "> -\treturn &map->forward[pos];\n"
- "> +\treturn NULL;\n"
- ">  }\n"
- ">  \n"
- ">  static void *uid_m_start(struct seq_file *seq, loff_t *ppos)\n"
- "> diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c\n"
- "> index 125c1eab3eaa..56909c8fa025 100644\n"
- "> --- a/net/ipv4/raw.c\n"
- "> +++ b/net/ipv4/raw.c\n"
- "> @@ -476,6 +476,7 @@ static int raw_getfrag(void *from, char *to, int offset, int len, int odd,\n"
- ">  \tif (offset < rfv->hlen) {\n"
- ">  \t\tint copy = min(rfv->hlen - offset, len);\n"
- ">  \n"
- "> +\t\tosb();\n"
- ">  \t\tif (skb->ip_summed == CHECKSUM_PARTIAL)\n"
- ">  \t\t\tmemcpy(to, rfv->hdr.c + offset, copy);\n"
- ">  \t\telse\n"
- "> diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c\n"
- "> index 761a473a07c5..0942784f3f8d 100644\n"
- "> --- a/net/ipv6/raw.c\n"
- "> +++ b/net/ipv6/raw.c\n"
- "> @@ -729,6 +729,7 @@ static int raw6_getfrag(void *from, char *to, int offset, int len, int odd,\n"
- ">  \tif (offset < rfv->hlen) {\n"
- ">  \t\tint copy = min(rfv->hlen - offset, len);\n"
- ">  \n"
- "> +\t\tosb();\n"
- ">  \t\tif (skb->ip_summed == CHECKSUM_PARTIAL)\n"
- ">  \t\t\tmemcpy(to, rfv->c + offset, copy);\n"
- ">  \t\telse\n"
- "> diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c\n"
- "> index 8ca9915befc8..7f83abdea255 100644\n"
- "> --- a/net/mpls/af_mpls.c\n"
- "> +++ b/net/mpls/af_mpls.c\n"
- "> @@ -81,6 +81,8 @@ static struct mpls_route *mpls_route_input_rcu(struct net *net, unsigned index)\n"
- ">  \tif (index < net->mpls.platform_labels) {\n"
- ">  \t\tstruct mpls_route __rcu **platform_label =\n"
- ">  \t\t\trcu_dereference(net->mpls.platform_label);\n"
- "> +\n"
- "> +\t\tosb();\n"
- ">  \t\trt = rcu_dereference(platform_label[index]);\n"
- ">  \t}\n"
- ">  \treturn rt;"
+ Does that sound workable to you?
 
-50535f4bc416b1c9711b9d8b002f7d02fed1901b4e2fa58f804fcded9a14ebbe
+887c6c52a1170f04104363d71ff7cc15c8cf7c2d6ce2372513250b2bf51585e7

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox