rust_binder: freeze_notif_done should resend if wrong state

Consider the following scenario:
1. A freeze notification is delivered to thread 1.
2. The process becomes frozen or unfrozen.
3. The message for step 2 is delivered to thread 2 and ignored because
there is already a pending notification from step 1.
4. Thread 1 acknowledges the notification from step 1.
In this case, step 4 should ensure that the message ignored in step 3 is
resent as it can now be delivered.

Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Acked-by: Carlos Llamas <cmllamas@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by Alice Ryhl and committed by Greg Kroah-Hartman bfe144da c7c090af

+3 -2
+3 -2
drivers/android/binder/freeze.rs
··· 245 245 ); 246 246 return Err(EINVAL); 247 247 } 248 - if freeze.is_clearing { 249 - // Immediately send another FreezeMessage for BR_CLEAR_FREEZE_NOTIFICATION_DONE. 248 + let is_frozen = freeze.node.owner.inner.lock().is_frozen; 249 + if freeze.is_clearing || freeze.last_is_frozen != Some(is_frozen) { 250 + // Immediately send another FreezeMessage. 250 251 clear_msg = Some(FreezeMessage::init(alloc, cookie)); 251 252 } 252 253 freeze.is_pending = false;