Re: [PATCH 2/5] dccp: Auto-load (when supported) CCID plugins for negotiation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2008/12/13 Gerrit Renker <gerrit@xxxxxxxxxxxxxx>:> | > +static int ccid_request_module(u8 id)> | > +{> | > +       if (!in_atomic()) {> | > +               ccids_read_lock();> | > +               if (ccids[id] == NULL) {> | > +                       ccids_read_unlock();> | > +                       return request_module("net-dccp-ccid-%d", id);> | > +               }> | > +               ccids_read_unlock();> | > +       }> | > +       return 0;> | > +}> |> | Just a random thought: does this lock really do anything useful here?> |> Reading the (shared) 'ccids' array is the solution chosen to check whether> the module for CCID with number 'id' is already loaded.>> It would be bad to call request_module() each time a new DCCP socket is> opened. Using the 'ccids' array may not be the only way to check whether> a given module (whose name depends on the value of 'id') is loaded.>> But if this solution is chosen, then it requires to protect the read> access to 'ccids', which is shared among all DCCP sockets.
Since the lock is dropped after checking ccids[id] then there'sa window where multiple request_module()s can be called if multipleapplications create a DCCP socket at a same time. The code belowshould do the same without a lock (ccids is a static array,so ccids[N] is always at the same place).
static int ccid_request_module(u8 id){       if (!in_atomic()) {               rmb();               if (ccids[id] == NULL)                       return request_module("net-dccp-ccid-%d", id);       }       return 0;}
Best Regards,Michał Mirosław˙ôčş{.nÇ+?ˇ?Ž?­?+%?Ë˙ąéÝśĽ?w˙ş{.nÇ+?ˇ?qĘ˙?{ayşĘ?Ú?ë,j­˘fŁ˘ˇh??ď?ę˙?ęçz_čŽ(­é???ݢj"?úśm§˙˙žŤţGŤ?é˙˘¸??¨č­Ú&Łř§~?á


[Index of Archives]     [Linux Kernel]     [IETF DCCP]     [Linux Networking]     [Git]     [Security]     [Linux Assembly]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux