[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH L1TF v10 7/8] common/grant_table: block speculative out-of-bound accesses
>>> On 20.05.19 at 16:27, <nmanthey@xxxxxxxxx> wrote: > On 3/29/19 18:11, Jan Beulich wrote: >>>>> On 14.03.19 at 13:50, <nmanthey@xxxxxxxxx> wrote: >>> @@ -2410,9 +2448,11 @@ acquire_grant_for_copy( >>> PIN_FAIL(gt_unlock_out, GNTST_bad_gntref, >>> "Bad grant reference %#x\n", gref); >>> >>> - act = active_entry_acquire(rgt, gref); >>> + /* This call ensures the above check cannot be bypassed speculatively >>> */ >>> shah = shared_entry_header(rgt, gref); >>> - if ( rgt->gt_version == 1 ) >>> + act = active_entry_acquire(rgt, gref); >>> + >>> + if ( evaluate_nospec(rgt->gt_version == 1) ) >>> { >>> sha2 = NULL; >>> status = &shah->flags; >> What about the second version check further down in this function? > That one should be fine, as it exists that function afterwards, and > represents an abort path that is valid for both versions. That's not obvious from looking at just the if() in question. For example, fixup_status_for_copy_pin() gets handed "status" as an argument, which is version dependent. It seems quite likely indeed that no code changes are here, but this imo again needs discussing/explaining in the commit message. >>> @@ -3838,6 +3886,9 @@ static int gnttab_get_status_frame_mfn(struct domain >>> *d, >>> return -EINVAL; >>> } >>> >>> + /* Make sure idx is bounded wrt nr_status_frames */ >>> + block_speculation(); >>> + >>> *mfn = _mfn(virt_to_mfn(gt->status[idx])); >> Why not array_access_nospec()? And how is this different from >> gnttab_get_shared_frame_mfn(), which you don't change? > > This idx access is to a version dependent structure, and hence > array_index_nospec is not good enough to catch the version difference > case as well. But the comment talks about the array bound only. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |