linux-rdma.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Matan Barak <matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
To: Bart Van Assche
	<bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>,
	Somnath Kotur
	<somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@public.gmane.org>,
	roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Or Gerlitz <ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v3 for-next 01/33] IB/core: Add RoCE GID cache
Date: Tue, 14 Apr 2015 16:23:18 +0300	[thread overview]
Message-ID: <552D14C6.50000@mellanox.com> (raw)
In-Reply-To: <551347E9.5090503-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>



On 3/26/2015 1:42 AM, Bart Van Assche wrote:
> On 03/25/2015 02:19 PM, Somnath Kotur wrote:
>> +    if (cache->data_vec[ix].attr.ndev &&
>> +        cache->data_vec[ix].attr.ndev != old_net_dev)
>
> A few lines earlier the memory old_net_dev points at was freed. If two
> instances of this function run concurrently, what prevents that the
> old_net_dev memory has been reallocated and hence that attr.ndev ==
> old_net_dev although both pointers refer(red) to different network
> devices ?
>

write_gid is *almost* always called in a mutex. The only case it's not 
protected is in free_roce_gid_cache. free_roce_gid_cache is called only 
in the error flow of roce_gid_cache_setup_one, when no concurrent 
write_gid could be made (as the cache isn't setup yet) and in 
roce_gid_cache_cleanup_one. roce_gid_cache_client_setup_one is called in 
the error flow of roce_gid_cache_client_setup_one (where no other 
write_gid are expected for the same above reason) and in 
roce_gid_cache_client_cleanup_work_handler, where it's called after 
flush_workqueue(roce_gid_mgmt_wq). Since all write_gids are called 
through roce_gid_mgmt_wq and we set the cache to inactive mode before 
flushing the wq and freeing the cache, I think we can conclude no 
concurrent write_gid on the same cache are possible.

>> +    ACCESS_ONCE(cache->data_vec[ix].seq) = orig_seq;
>
> Invoking write_gid() is only safe if the caller serializes write_gid()
> calls. Apparently the cache->lock mutex is used for that purpose. So why
> is it necessary to use ACCESS_ONCE() here ? Why is it needed to prevent
> that the compiler coalesces this write with another write into the same
> structure ?
>

The mutex only serializes cache writes. Cache reads could be done in 
concurrent with writes and are protected by the ACCESS_ONCE.

>> +        /* Make sure the sequence number we remeber was read
>
> This looks like a typo - shouldn't the above read "remember" ?
>

Will be fixed in V4, thanks.

> BTW, the style of that comment is recommended only for networking code
> and not for IB code. Have you verified this patch with checkpatch ?
>

Of course and I've just re-run checkpatch on this patch. It doesn't 
catch this.

>> +    mutex_lock(&cache->lock);
>> +
>> +    for (ix = 0; ix < cache->sz; ix++)
>> +        if (cache->data_vec[ix].attr.ndev == ndev)
>> +            write_gid(ib_dev, port, cache, ix, &zgid, &zattr);
>> +
>> +    mutex_unlock(&cache->lock);
>> +    return 0;
>
> The traditional Linux kernel coding style is one blank line before
> mutex_lock() and after mutex_unlock() but not after mutex_lock() nor
> before mutex_unlock().
>

I didn't find this in the CodingStyle doc. Could you please quote or 
post a link?

>> +    orig_seq = ACCESS_ONCE(cache->data_vec[index].seq);
>> +    /* Make sure we read the sequence number before copying the
>> +     * gid to local storage. */
>> +    smp_rmb();
>
> Please use READ_ONCE() instead of ACCESS_ONCE() as recommended in
> <linux/compiler.h>.
>

Ok, I'll change that in V4. I see that READ_ONCE and WRITE_ONCE is 
different from ACCESS_ONCE only for aggregated data types (which isn't 
our case), but it won't hurt to change that.

>> +static void free_roce_gid_cache(struct ib_device *ib_dev, u8 port)
>> +{
>> +    int i;
>> +    struct ib_roce_gid_cache *cache =
>> +        ib_dev->cache.roce_gid_cache[port - 1];
>> +
>> +    if (!cache)
>> +        return;
>> +
>> +    for (i = 0; i < cache->sz; ++i) {
>> +        if (memcmp(&cache->data_vec[i].gid, &zgid,
>> +               sizeof(cache->data_vec[i].gid)))
>> +            write_gid(ib_dev, port, cache, i, &zgid, &zattr);
>> +    }
>  > +    kfree(cache->data_vec);
>  > +    kfree(cache);
>  > +}
>
> Overwriting data just before it is freed is not useful. Please use
> CONFIG_SLUB_DEBUG=y to debug use-after-free issues instead of such code.
>

It's mandatory as write_gid with zgid might cause the vendor driver to 
free memory it allocated for this GID entry (like in the mlx4 case).

> Bart.

Thanks for the review :)

Matan
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2015-04-14 13:23 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1427318422-12004-1-git-send-email-somnath.kotur@emulex.com>
     [not found] ` <1427318422-12004-1-git-send-email-somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@public.gmane.org>
2015-03-25 21:19   ` [PATCH v3 for-next 01/33] IB/core: Add RoCE GID cache Somnath Kotur
     [not found]     ` <44ab0dce-c7c9-400b-af24-10b8981358a7-3RiH6ntJJkOPfaB/Gd0HpljyZtpTMMwT@public.gmane.org>
2015-03-25 23:42       ` Bart Van Assche
     [not found]         ` <551347E9.5090503-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-03-26 14:05           ` Somnath Kotur
2015-04-14 13:23           ` Matan Barak [this message]
     [not found]             ` <552D14C6.50000-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-14 15:31               ` Bart Van Assche
2015-04-08  0:30       ` Hefty, Sean
     [not found]         ` <1828884A29C6694DAF28B7E6B8A82373A8FBE792-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-08  4:10           ` Somnath Kotur
     [not found]             ` <7F44EA5110810A40B7DAFB605C41975D58F98121-DWYeeINJQrxExQ8dmkPuX0M9+F4ksjoh@public.gmane.org>
2015-04-13 23:50               ` Hefty, Sean
     [not found]                 ` <1828884A29C6694DAF28B7E6B8A82373A8FC0C00-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-14  9:32                   ` Matan Barak
     [not found]                     ` <552CDEA5.6020709-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-14 17:32                       ` Hefty, Sean
     [not found]                         ` <1828884A29C6694DAF28B7E6B8A82373A8FC11F3-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-15  5:35                           ` Somnath Kotur
     [not found]                             ` <7F44EA5110810A40B7DAFB605C41975D58FA0B05-DWYeeINJQrxExQ8dmkPuX0M9+F4ksjoh@public.gmane.org>
2015-04-15 16:08                               ` Hefty, Sean
     [not found]                                 ` <1828884A29C6694DAF28B7E6B8A82373A8FC19D9-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-15 16:21                                   ` Suri Shelvapille
     [not found]                                     ` <CY1PR03MB1440108D65F18916AF9B2425DEE50-DUcFgbLRNhB/HYnSB+xpdWP7xZHs9kq/vxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2015-04-16 10:42                                       ` Matan Barak
2015-04-16 10:43                                   ` Moni Shoua
     [not found]                                     ` <CAG9sBKPQ7r2j4Awd3=CtRzekWPVe6hcO1+S+kspMEr4n=kDnkw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-04-16 14:58                                       ` Hefty, Sean
2015-04-08  8:49           ` Moni Shoua
2015-04-26 17:20       ` Or Gerlitz
     [not found]         ` <CAJ3xEMgepRUQs+GiMWxzV_QFaRnfbX7TPOdB_sKgRhHj7x7NDg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-04-27  7:32           ` Matan Barak
     [not found]             ` <553DE614.7050508-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-27 18:22               ` Or Gerlitz
     [not found]                 ` <CAJ3xEMjEhv3Nm_EfFcBWLk1ChQXBM5KvPxh5DstCqxeMo0MGwA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-04-28  7:17                   ` Matan Barak
     [not found]                     ` <553F341D.8000907-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-28 12:57                       ` Or Gerlitz
2015-03-25 21:19   ` [PATCH v3 for-next 02/33] IB/core: Add kref to IB devices Somnath Kotur
     [not found]     ` <9f65de5e-ed5f-48d2-bff2-03ffbe4f4876-3RiH6ntJJkOPfaB/Gd0HpljyZtpTMMwT@public.gmane.org>
2015-03-25 23:46       ` Bart Van Assche
     [not found]         ` <551348BD.9080200-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-04-14 13:27           ` Matan Barak
2015-04-26 20:10       ` Or Gerlitz
     [not found]         ` <CAJ3xEMhBNt-VNNds37sXnJi3nP9ZTMd6mC3s+qZWh0XsO1n_Nw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-04-27  8:25           ` Matan Barak
     [not found]             ` <553DF294.4070507-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-27 16:22               ` Jason Gunthorpe
     [not found]                 ` <20150427162256.GA24316-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-04-28  8:32                   ` Matan Barak
     [not found]                     ` <553F4588.80301-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-28 16:03                       ` Jason Gunthorpe
     [not found]                         ` <20150428160315.GA5497-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-04-28 16:17                           ` Matan Barak
2015-04-28 11:51               ` Or Gerlitz
     [not found]                 ` <CAJ3xEMjzgS_uR1VaeGzW+jcfG2oiVo4=fCctX6o4OVbKRX2n0Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-04-28 14:03                   ` Matan Barak
     [not found]                     ` <553F931F.6000302-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-28 17:43                       ` Jason Gunthorpe
     [not found]                         ` <20150428174312.GB5497-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-04-28 19:04                           ` Or Gerlitz
2015-04-29  9:16                           ` Matan Barak
2015-04-29 15:29                           ` Matan Barak
     [not found]                             ` <5540F8F4.5010906-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2015-04-29 16:48                               ` Jason Gunthorpe
     [not found]                                 ` <20150429164847.GA12781-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-04-30  8:21                                   ` Matan Barak
     [not found]                                     ` <5541E5ED.7000606-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-30 16:56                                       ` Hefty, Sean
     [not found]                                         ` <1828884A29C6694DAF28B7E6B8A82373A8FC929B-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-30 17:52                                           ` Jason Gunthorpe
     [not found]                                             ` <20150430175252.GB32666-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-04-30 19:21                                               ` Hefty, Sean
     [not found]                                                 ` <1828884A29C6694DAF28B7E6B8A82373A8FC9419-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-30 21:28                                                   ` Jason Gunthorpe
     [not found]                                                     ` <20150430212842.GB7709-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-01  6:41                                                       ` Matan Barak
2015-05-01  6:34                                               ` Matan Barak
     [not found]                                                 ` <CAAKD3BCJbUAMYhBzwuQFct=cRSXnGC=ELzNkvw2X04a4UipQwQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-01 17:36                                                   ` Jason Gunthorpe
     [not found]                                                     ` <20150501173643.GC17940-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-03  9:05                                                       ` Matan Barak
2015-04-30 17:26                                       ` Jason Gunthorpe
     [not found]                                         ` <20150430172606.GA32666-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-01  6:28                                           ` Matan Barak
     [not found]                                             ` <CAAKD3BBGQwZ_Ainm6MSQjSkaXsJd9M5Vo4oarTLyFiVMQVS5_Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-01 17:31                                               ` Jason Gunthorpe
     [not found]                                                 ` <20150501173133.GB17940-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-05 10:58                                                   ` Matan Barak
2015-03-25 21:19   ` [PATCH v3 for-next 03/33] IB/core: Add RoCE GID population Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 04/33] IB/core: Add default GID for RoCE GID Cache Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 05/33] net/bonding: make DRV macros private Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 06/33] net: Add info for NETDEV_CHANGEUPPER event Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 07/33] IB/core: Add RoCE cache bonding support Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 08/33] IB/core: GID attribute should be returned from verbs API and cache API Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 09/33] IB/core: Report gid_type and gid_ndev through sysfs Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 10/33] IB/core: Support find sgid index using a filter function Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 11/33] IB/core: Modify ib_verbs and cma in order to use roce_gid_cache Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 12/33] IB/core: Add gid_type to path and rdma_id_private Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 13/33] IB/core: Add rdma_network_type to wc Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 14/33] IB/cma: Add configfs for rdma_cm Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 15/33] IB/Core: Changes to the IB Core infrastructure for RoCEv2 support Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 16/33] RDMA/ocrdma: Changes in driver to incorporate the moving of GID Table mgmt to IB/Core Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 17/33] RDMA/ocrdma: changes to support RoCE-v2 in UD path Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 18/33] RDMA/ocrdma: changes to support RoCE-v2 in RC path Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 19/33] RDMA/ocrdma: changes to support user AH creation Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 20/33] IB/mlx4: Remove gid table management for RoCE Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 21/33] IB/mlx4: Replace spin_lock with rw_semaphore Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 22/33] IB/mlx4: Lock with RCU instead of RTNL Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 23/33] net/mlx4: Postpone the registration of net_device Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 24/33] IB/mlx4: Advertise RoCE support in port capabilities Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 25/33] IB/mlx4: Implement ib_device callback - get_netdev Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 26/33] IB/mlx4: Implement ib_device callback - modify_gid Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 27/33] IB/mlx4: Configure device to work in RoCEv2 Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 28/33] IB/mlx4: Translate cache gid index to real index Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 29/33] net/mlx4_core: Add handling of R-RoCE over IPV4 in qp attach flow Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 30/33] IB/core: Initialize UD header structure with IP and UDP headers Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 31/33] IB/mlx4: Enable send of RoCE QP1 packets with IP/UDP headers Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 32/33] IB/mlx4: Create and use another QP1 for RoCEv2 Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 33/33] IB/cma: Join and leave multicast groups with IGMP Somnath Kotur

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=552D14C6.50000@mellanox.com \
    --to=matanb-vpraknaxozvwk0htik3j/w@public.gmane.org \
    --cc=bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).