...
Code Block | ||
---|---|---|
| ||
class BadLocks { private int balance; // Total amount private BadLocks(int balance) { blthis.balance = balance; } private synchronized void withdraw() { System.out.println("Withdrawing amount..."); this.balance = 0; } private synchronized void deposit(BadLocks bl) { System.out.println("Depositing amount..."); bl.balance += this.balance; bl.withdraw(); } public static void main(String[] args) throws Exception { final BadLocks a = new BadLocks(5000); final BadLocks b = new BadLocks(6000); // These two threads correspond to two malicious requests triggered by the attacker Thread t1 = new Thread(new Runnable() { public void run() { a.deposit(b); } }); Thread t2 = new Thread(new Runnable() { public void run() { b.deposit(a); } }); t1.start(); t2.start(); } } |
...