标签:do 保护 void some 互斥 something 泄漏 data
如果受保护的数据的指针或引用,被任意函数返回,或者将受保护的数据传至到互斥元之外的函数,在外部储存。这样的话任意函数都可以对其访问(可能对其修改)。
代码如下:
class some_data { int a; string a; public: void do_something(); }; class data_wrapper { private: some_data data; mutex m; public: template<typename Function> void process_data(Function func) { lock_guard<mutex> l(m); func(data); //将受保护的数据传递给互斥元范围 } }; some_data* unprotected; void malicious_function(some_data & protected_data) { unprotected->do_something(); } data_wrapper x; int main() { x.process_data(malicious_function); //恶意传值 unprotected->do_something(); //对受到保护的对象进行访问 system("pause"); return 0; }
不要将对受保护数据的指针和引用传递锁的范围之外,无论是通过函数返回它们,将其存放在外部可见的内存中,还是作为参数传递给其他的函数。
标签:do,保护,void,some,互斥,something,泄漏,data 来源: https://www.cnblogs.com/----MAX/p/11862805.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。