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